让说我的单元测试,返回汽车的数量在我的车库的方法,所以我有这样的方法:我应该在单元测试中做多少对象初始化?
public class Garage {
public long numberOfCarsInGarage() {
return cars.size();
}
}
从测试类:
@Test
public void numberOfCarsInGarage_returnsCount_whenCarsHaveBeenAddedToTheGarage() {
Garage garage = new Garage();
Car firstCar = new Car();
Car secondCar = new Car();
Car thirdCar = new Car();
garage.addCars(firstCar, secondCar, thirdCar);
assertEquals(3, garage.numberOfCarsInGarage());
}
每辆车对象有许多属性需要设置,但我不需要设置它们以便测试通过。我是否应该在测试中尽可能少地使用代码来使其通过/失败?在这个测试中,我没有在汽车对象上设置虚拟数据,我没有做错任何事情?
您不需要设置不会导致测试失败的字段。我会尽最大努力通过测试。理想情况下,你会做的最低首先失败,然后添加代码,使其通过。 –
调用'garage.addCars(...);'的已知副作用是什么?这就是你的测试应该涵盖的内容。 –
我同意上述两点意见。我的建议:写下待测试方法的javadoc,并验证在此javadoc中声明的合同是否已完成。如果合同是“返回车库中的汽车总数”,那么它应该测试。如果合同是“返回车库中红色车辆的数量”,那么它应该添加一些红色车辆和一些非红色车辆,并对其进行测试。编写javadoc不仅仅是因为它记录了方法,还因为它让你思考你需要测试什么,边缘情况等。 –