clean code-代码整洁之道 阅读笔记(第九章)
前文连接:clean code-代码整洁之道 阅读笔记(第一章~第八章)-CSDN博客
第九章 单元测试
9.1 TDD 三定律
TDD 有广义和狭义之分,常说的是狭义的 TDD,也就是 UTDD(Unit Test Driven Development)。广义的 TDD 是 ATDD(Acceptance Test Driven Development),包括 BDD(Behavior Driven Development)和 Consumer-Driven Contracts Development 等。
此处所说的 TDD 指狭义上的 TDD,也就是「单元测试驱动开发」。
TDD 是敏捷开发中的一项核心实践和技术,也是一种设计方法论。TDD的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码。TDD 是 XP(Extreme Programming)的核心实践。它的主要推动者是 Kent Beck。
- 定律一 在编写不能通过的单元测试前,不可编写生产代码。
- 定律二 只可编写刚好不能通过的单元测试,不能编译也算不通过。
- 定律三 只可编写刚好足以通过当前失败测试的生产代码。
这三条定律将你限制在大概30秒一个的循环中。测试与生产代码一起编写,测试只比生产代码早写几秒钟。
这样写程序,测试将覆盖所有生产代码。测试代码量足以匹敌生产代码,导致管理问题。
9.2 保持测试整洁
测试代码和生产代码一样重要。它需要被思考、被设计和被照料。它该像生产代码一般保持整洁。
如果测试不干净,你改动自己代码的能力就有所牵制,而你也会开始失去改进代码结构的能力。测试越脏,代码就会变得越脏。最终,你丢失了测试,代码开始腐坏。
9.3 整洁的测试
整洁的测试有什么要素?有三个要素:可读性,可读性和可读性。
测试如何才能做到可读?和其他代码一样:明确,简洁,还有足够的表达力。
public void testGetPageHierarchyAsXml() throws Exceeption{ { makePages("PageOne", "PageOne.Childone", "PageTwo"); submitRequest("root", "type:pages"); assertResponseIsXML(); assertResponseContains( "PageOne", "PageTwo", "Childone" ); } public void testSymbolicLinksAreNotInXmlPageHierarchy() thnrows Exception{ WikiPage page makePage ("PageOne"); makePages("PageOne.Childone", "PageTwo"); addLinkTo(page, "PageTwo", "SymPage"); submitRequest("root", "type:pages"); assertResponseIsXML(); assertResponseContains( "PageOne", "PageTwo", "ChildOne" ); assertResponseDoesNotContain("SymPage"); } public void testGetDataAsXml()throws Exception{ makePageWith Content("TestPageOne", "test page"); submitRequest("TestPageOne", "type:data"); assertResponseIsXML(); assertResponseContains("test page","
