《代码整洁之道 》第九章 单元测试

87 阅读2分钟

第九章 单元测试

测试驱动开发。敏捷和TDD运动鼓舞课许多程序员编写自动化单元测试。

9.1 TDD三定律

定律一在编写不能通过的单元测试前,不可编写生产代码。
定律二只可编写刚好无法通过的单元测试,不能编译也算不通过
定律三只可编写刚好足以通过当前失败测试的生产代码。

9.2 保持测试整洁

测试代码和生产代码一样重要。它可不是二等公民。它需要被思考、 被设计和被照料。它该像生产代码一般保持整洁。
如果测试不能保持整洁,你就会失去它们。没有了测试,你就会失去保证生产代码可扩展的一切要素。你没看错。正是单元测试让你的代码可扩展、可维护、可复用。原因很简单。 有了测试,你就不担心对代码的修改!没有测试,每次修改都可能带来缺陷。

9.3 整洁的测试

测试代码也是需要可读性的。明确、简洁、足够的表达力。
每个测试都需要分成三个环节:第一个环节构造测试数据,第二个环节操作测试数据,第三个部分检验操作是否得到期望的结果。

9.3.1 面向特定领域的测试语言

代码清单9-2中的测试展示了为测试构造一种面向特定领域的语言的技巧。我们没有直 接使用程序员用来对系统进行操作的API,而是打造了一套包装这些API的函数和工具代码, 这样就能更方便地编写测试,写出来的测试也更便于阅读。

9.3.2 双重标准

测试和生产确实应该用两套不同的标准。毕竟他是在测试环境运行。着两种环境有不同的需求。

9.4 每个测试一个断言

有个流派认为,JUnit 中每个测试函数都应该有且只有一个断言语句.好处是这些都归结为一个可快速方便地理解的结论。
每个测试一个概念,就不会有长代码的测试用例。
image.png

9.5 F.I.R.S.T

整洁的测试还遵循以下5条规则,

  1. 快速(Fast)测试应该够快。测试应该能快速运行。
  2. 独立((Independent )测试应该相互独立。某个测试不应为下一个测试设定条件。
  3. 可重复(Repeatable )测试应当可在任何环境中重复通过。
  4. 自足验证(SelValidating )测试应该有布尔值输出。
  5. 及时(Timely )测试应及时编写。单元测试应该恰好在使其通过的生产代码之前编写。

9.6 小结

如果你坐视测试腐坏,那么代码也会跟着腐坏。保持测试整洁吧。