开发实践

编写让测试能够通过的最简单的代码

【好处】确保设计越来越清晰;避免实现不必要的功能。 </br> 实现越简单,产品越好,且越容易维护。</br> 这个理念遵循了KISS原则。这个原则指出,对大多数系统而言,保持简单而不是复杂化的效果最好。</br> 因此设计的主要目标是简约,必须避免不必要的复杂性。

先编写断言,再编写操作

【好处】这将更早澄清测试目的。

最大限度减少每个测试中的断言

【好处】避免不知道哪个断言导致测试失败;让更多断言得以执行。</br> </br> 断言失败时,其所属测试方法将停止执行。</br> 如果这个方法中还有其他断言,这些断言将不会执行,导致无法获得原本可用于调试的信息。

不要让测试依赖其他测试

【好处】测试能以任何顺序独立执行,不管运行全部还是部分测试,都将如此。</br> </br> 鉴于测试运行器的设计,测试的执行顺序通常是不确定的。</br> 如果测试之间存在依赖关系,引入新测试时,这种依赖关系很容易遭到破坏。

测试的运行速度必须很快

【好处】这样就能经常运行测试。</br> </br> 测试的运行速度必须很快,让开发人员每次修改后都能运行所有测试,而不会感到厌烦或气馁。

使用测试替身

【好处】减少代码依赖并提高测试的执行速度。</br> </br> 要快速执行测试并专注于单个功能单元,必须使用模拟对象。</br> 通过模拟受测方法的外部依赖,开发人员能够专注于手头的任务,而无需花时间建立这些依赖。

使用 @Before 和 @after 注解

【好处】让我们能够在类或各个测试方法之前和之后执行设置和拆除代码。

不要在测试中使用基类

【好处】让测试更清晰。</br> </br> 创建基类,并让测试对其进行扩展。这种做法可避免代码重复,但代价是测试不清晰。</br> 相比于避免代码重复,测试的清晰度更重要。