在生产代码中提取类之后是否应该创建新的测试类?

时间:2014-10-20 21:43:44

标签: unit-testing junit tdd

假设我有一个很大的遗留类A。然后我写ATest以便我可以安全地重构A。然后我提取了许多类,例如,A调用BB调用CC调用DATest仍然涵盖ABCD。现在ATest几乎是一个集成测试,因为它涵盖了一个或两个以上的类(尽管与最初的功能相同)。现在,您能否建议我(或提供一些参考资料)是否应该花费大量时间将ATest分成BTestCTestDTest。如果是的话,我应该立即这样做吗?如果我必须向D添加新功能,我应该创建DTest而不触及ATest(选项1),将测试方法添加到ATest(选项2)或移动测试从ATestDTest并在那里添加新的测试方法(3)?

1 个答案:

答案 0 :(得分:2)

首先,确保ATest是一个纯粹的集成测试 - 也就是说它不仅仅是跨多个类的单元测试的负载......我的意思是ATest并不关心如何完成任何事情,只是最终结果是正确的。也就是说它不关心你如何制造汽车,只是建造一辆汽车。这很重要。

理想情况下,您应该在编写每个类之前指定BTest,CTest,DTest,以便:

a)你清楚地定义了每个班级的角色

b)在进入下一个

之前,您确定每个部分都是正确的 c)你允许将来容易隔离问题(即将失败的组件--B,C或D与各自的失败测试隔离开来)

最后,您应该为每个类进行一次通过单元测试,并对该过程进行集成测试。

添加功能:编写单元测试,然后编写类。然后,如果它影响过程的核心结果(比如最终产品不是汽车,那就是自行车!),添加集成测试,否则,不需要进行集成测试。