那么,我有一个使用另一种方法的方法。我有次要方法的测试,现在我想为主要方法编写单元测试。如何使用包含其他方法的方法编写单元测试?
我认为我必须在没有看到要测试的方法的代码的情况下编写测试,我的意思是,我没有在实现中考虑测试,因此在测试主要方法I必须测试次要方法的功能和主要方法的功能。
例如,我有两个汽车车库。在加拉加有一辆汽车和我拥有的汽车数量。所以我想能够添加一辆新车到加拉加,取下汽车并将车从车库转移到另一辆车。所以我有这种方法:
- 一种方法将车添加到车库,必须与汽车相关的加拉加和udpdate汽车的数量。这是我有一辆新车的时候。
- 一种从车库中取出汽车的方法,与车库无关并更新汽车数量。这是当我没有车了,例如,因为我卖了它。
- 关于转移车辆的方法,即将车辆从第一个车库中取出并将车辆添加到新车库。所以这个方法调用add方法和remove方法。
的传输方法的代码是类似的东西:
public void transferCar(garage1, garage2, car)
{
removeCar(garage1, car);
addCar(garage2, car);
}
如果我测试removeCar和addCar,我相信他们的工作预期,测试转移,我一定要考所有addCar的情况以及removeCar的所有情况?因为如果我不知道transferCar的实现,我不知道此方法是否使用removeCar和addCar,因此我不知道该方法是否按预期工作。
换句话说,当我测试transferCar时,测试必须覆盖removeCar的代码的100%,addCar的代码的100%和transferCar方法的代码的100%,或者确保我调用该方法removeCar一次和addCar在transferCar和它的预期是否足够,虽然removecar和addCar不被覆盖100%?
因为如果我必须测试removeCar和addCar的所有情况,我会做两次相同的测试。所以我重构了代码,因为removeCar和addCar我在很多地方使用它,但在我的测试代码中,我多次使用相同的测试。
这是一个非常单一的例子,但是如果我有一个方法使用很少的方法,而这个其他方法使用antohers,并且主方法应该覆盖所有方法的所有代码,那将是一个非常长的测试,和很多工作。
总的来说,当我测试一个方法时,我已经覆盖了此方法的代码的100%以及此方法使用的方法的代码的100%,或者只是为了确保main方法的工作原理为预计和每次辅助方法调用一次?
谢谢。
但是,如果有可能,谁实现了单元测试应该是不同的谁执行测试,becuse以这种方式很容易发现错误的方法的人。因此,实施测试的人可能不知道实施的任何内容。 –
所以,你的意思是双方都知道类的结构,公共方法,接口,存根/伪造什么,模拟和其他细节,除了每个函数是如何单独实现的?不知道这是否是一个正确的做法,但我想接下来我们要接受太多的冗余代码和额外的努力, –
因为这个问题是在TDD标签提交下看,“不同的人应该写测试”在我看来是一些非常奇特咨询。然而,这是一个非常好的主意,让测试的重点是行为(即不按样的规则,“每个方法1个单元测试”,只是测试被测系统的所有可能的用途,如果像这样的测试练习3个不同的那个对象的方法,就这样吧)。 – prgmtc