在讨论了单元测试应该具有的重要属性之后,我来给出单元测试的最终定义。 定义最终更新1.2 一个单元测试是一段自动化的代码,这段代码调用被测试的工作单元,之后对这个单元的单个最终结果的某些假设进行检验。单元测试几乎都是用单元测试框架编写的。单元测试容易编写,能快速运行。单元测试可靠、可读,并且可维护。只要产品代码不发生变化,单元测试的结果是稳定的。 这个定义看起来的确很难实现,尤其是考虑到有很多开发人员的单元测试都做得很糟糕。我们需要认真审视一下,到现在为止,作为开发人员是如何实施测试的,并和我们希望的方式做个比较。(第8章将讨论可靠、可读以及可维护的测试。) 在本书的前一版本中,我对单元测试的定义略有不同。我在前一版本中把单元测试定义为“只对控制流代码运行”,但现在认为这不正确。没有逻辑的代码通常用作工作单元的一部分。即便是没有逻辑的属性也会在工作单元中使用,因此测试不需要特别针对它们。 定义 控制流代码是包含某种逻辑的代码段,无论其规模大小。控制流代码包含下面列举的一种或多种语句:if语句;loop、switch或case语句;计算;或其他任何类型的决策代码。 说到通常不包含任何逻辑,因此不需要特别进行测试的代码,属性(Java中的获取方法/设置方法)是个很好的例子。这种代码通常会用在你要测试的工作单元中,但是没必要直接测试它。但是要小心:一旦你在一个属性中加入了任何检验逻辑,就需要确保这个逻辑在测试中覆盖。 在下一节中,我们要介绍一个完全用代码实现的简单的单元测试,这个测试不使用任何单元测试框架。(我们会在第2章介绍单元测试框架。)