假设我有一个很大的遗留类A
。然后我写ATest
以便我可以安全地重构A
。然后我提取了许多类,例如,A
调用B
,B
调用C
,C
调用D
。 ATest
仍然涵盖A
,B
,C
和D
。现在ATest
几乎是一个集成测试,因为它涵盖了一个或两个以上的类(尽管与最初的功能相同)。现在,您能否建议我(或提供一些参考资料)是否应该花费大量时间将ATest
分成BTest
,CTest
,DTest
。如果是的话,我应该立即这样做吗?如果我必须向D
添加新功能,我应该创建DTest
而不触及ATest
(选项1),将测试方法添加到ATest
(选项2)或移动测试从ATest
到DTest
并在那里添加新的测试方法(3)?
答案 0 :(得分:2)
首先,确保ATest是一个纯粹的集成测试 - 也就是说它不仅仅是跨多个类的单元测试的负载......我的意思是ATest并不关心如何完成任何事情,只是最终结果是正确的。也就是说它不关心你如何制造汽车,只是建造一辆汽车。这很重要。
理想情况下,您应该在编写每个类之前指定BTest,CTest,DTest,以便:
a)你清楚地定义了每个班级的角色
b)在进入下一个
之前,您确定每个部分都是正确的 c)你允许将来容易隔离问题(即将失败的组件--B,C或D与各自的失败测试隔离开来)最后,您应该为每个类进行一次通过单元测试,并对该过程进行集成测试。
添加功能:编写单元测试,然后编写类。然后,如果它影响过程的核心结果(比如最终产品不是汽车,那就是自行车!),添加集成测试,否则,不需要进行集成测试。