假设我正在使用TDD来创建一个A类。在我完成并拥有一个“绿色”栏后,我决定使用一些重构工具从A类中仅使用静态方法提取一些B类。我现在已经对A类和B类进行了全面的单元测试,但是只通过A类的测试类。我现在还应该创建一个特定于B类功能的测试类,即使这会重复测试吗?
答案 0 :(得分:12)
一如既往,这取决于您的背景。你在乎什么?
整体行为
如果您正在构建供内部使用的系统,或者甚至是公共(Web)服务,您所运送的软件是整个系统,那么您不必过多关注单个类。 如果您正在构建系统,请测试系统。
只要测试覆盖它,您就知道您的系统行为正常。但是,您可能会遇到这样的情况,即在几个月之后,您意识到您不再需要原始的A
类,因此您将其删除并进行相应的单元测试。这可能导致B
的测试覆盖率下降,因此关注代码覆盖率趋势可能是个好主意。
单位行为
如果您正在构建(类)库或框架,那么您将每个公共类作为产品的一部分进行发布。如果您的库中有多个用户,则需要开始考虑如何避免更改。
避免破坏变化的最有效方法之一是通过单元测试覆盖每个类。只要您don't change the tests,您就知道如果所有测试都是绿色的话,不太可能发生重大变化。但是,这需要您测试所有公共类和成员。
因此,如果您将B
提取到公共类,它现在是其他消费者可能依赖的类,如果您更改它将是一个重大变化。因此,您应该使用新测试来覆盖它。 如果您正在构建一个单元,请测试该单元。
答案 1 :(得分:0)
根据您的描述,答案是创建另一个新测试。如果您(或不熟悉“共享测试”的其他人)进行了更改,则不再对其他类进行测试。
如果这看起来很浪费,请将常用测试代码放在第三类......