首页 > 其他分享 >《代码整洁之道》第 9 章 单元测试

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

时间:2023-08-28 11:26:01浏览次数:31  
标签:PageTwo 代码 单元测试 之道 测试 编写 整洁

第 9 章 单元测试

9.1 TDD 三定律

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

9.2 保持测试整洁

测试代码和生产代码一样重要。它可不是二等公民。他需要被思考、被设计和被照料。它该像生产代码一样保持整洁。

9.3 整洁的测试

整洁的测试有什么要素?有三个要素:可读性、可读性和可读性。在单元测试中,可读性甚至比在生产代码中还重要。测试如何才能做到可读?和其他代码一样:明确,简洁,还有足够的表达力。在测试中,你要以尽可能少的文字表达大量内容。

……

现在看看代码清单 9-2 中改进了的测试。这些测试还是做一样的事,不过已经被重构为更整洁和有表达力的形式。

// 代码清单9-2 SerializedPageResponderTestjava (重构后)
public void testGetPageHierarchyAsXml() throws Exception {
	makePages("Page0ne", "PageOne.Child0ne", "PageTwo") ;
	
  submitRequest ("root", "type:pages") ;

  assertResponseIsXML();
	assertResponseContains (
		"<name> PageOne</name>", "<name> PageTwo</name>", "<name>Child0ne</name>" 
	);
}

public void testSymbolicLinksAreNotInXmlPageHierarchy() throws Exception {
  WikiPage page = makePage(" PageOne") ;
  makePages("Rage0ne.Child0ne", "PageTwo");
  
  addLinkTo(page, "PageTwo", "SymPage") ;
  submitRequest("root", "type:pages");
  
  assertResponseIsXML() ;
  assertResponseContains(
  	"<name> PageOne</name>", "<name> PageTwo</name>","<name>Child0ne</name>"
  );
	assertResponseDoesNotContain ("SymPage") ;
}

public void testGetDataAsXml() throws Exception {
  makePageWithContent("TestPageOne", "test page");
  
  submitRequest("TestPageOne", "type:data");

  assertResponseIsXML() ;
  assertResponseContains("test page", "<Test") ;
}

这些测试显然呈现了构造-操作-检验(BUILD-OPERATE-CHECK)模式。每个测试都清晰地拆分为三个环节。第一个环节构造测试数据,第二个环节操作测试数据,第三个部分检验操作是否得到期望的结果

9.4 每个测试一个断言

单个断言是个好准则。……最好的说法是单个测试中的断言数量应该最小化。

……

每个测试一个概念

更好一些的规则或许是每个测试函数中只测试一个概念。我们不想要超长的测试函数,测试完这个又测试那个。代码清单 9-8 就是那样一种测试的例子。这个测试应当拆解为 3 个单独测试,因为它测试了 3 件不同的事。把三者混到一起,读者就不得不猜想每段代码出现的理由,以及那段代码到底要测试什么。

9.5 F.I.R.S.T.

整洁的测试还遵循以下 5 条规则,这 5 条规则的首字母构成了本节标题:

  • 快速(Fast)测试应该够快。 测试应该能快速运行。测试运行缓慢,你就不会想要频繁地运行它。如果你不频繁运行测试,就不能尽早发现问题,也无法轻易修正,从而也不能轻而易举地清理代码。最终,代码就会腐坏。
  • 独立(Independent)测试应该相互独立。 某个测试不应为下一个测试设定条件。你应该可以单独运行每个测试,及以任何顺序运行测试。当测试互相依赖时,头一个没通过就会导致一连串的测试失败,使问题诊断变得困难,隐藏了下级错误。
  • 可重复(Repeatable)测试应当可在任何环境中重复通过。你应该能够在生产环境、质检环境中运行测试,也能够在无网络的列车上用笔记本电脑运行测试。如果测试不能在任意环境中重复,你就总会有个解释其失败的接口。当环境条件不具备时,你也会无法运行测试。
  • 自足验证(Self-Validating)测试应该有布尔值输出。无论是通过或失败,你不应该查看日志文件来确认测试是否通过。你不应该手工对比两个不同文本文件来确认测试是否通过。如果测试不能自足验证,对失败的判断就会变得依赖主观,而运行测试也需要更长的手工操作时间。
  • 及时(Timely):测试应及时编写。单元测试应该恰好在使其通过的生产代码之前编写。如果在编写生产代码之后编写测试,你会发现生产代码难以测试。你可能会认为某些生产代码本身难以测试。你可能不会去设计可测试的代码。

标签:PageTwo,代码,单元测试,之道,测试,编写,整洁
From: https://www.cnblogs.com/Sherry4869/p/17661817.html

相关文章

  • 前端单元测试与自动化测试实践
    1.引言在前端开发中,单元测试和自动化测试是保证代码质量和稳定性的重要手段。通过编写和执行测试用例,可以及早发现代码中的问题,并确保代码在不同环境下的正确运行。本文将介绍前端单元测试和自动化测试的实践,并通过一个示例说明其重要性和具体操作。2.前端单元测试前端单元测......
  • Python单元测试——深入理解unittest
    单元测试的重要性就不多说了,可恶的是python中有太多的单元测试框架和工具,什么unittest,testtools,subunit,coverage,testrepository,nose,mox,mock,fixtures,discover,再加上setuptools,distutils等等这些,先不说如何写单元测试,光是怎么运行单元测试就有N多种方法,再因为它......
  • go单元测试
    目录gotest介绍语法高级用法gotest实例脚本化生成测试报告数据网页形式查看测试报告gotest介绍1.gotest命令会自动执行_test.go结尾的源码内以Test开头的函数生成可测试用的执行文件2.不需要main函数作为入口函数3.不会参与到正常源码编译4.执行gotest需要切换目录......
  • 开发如何才能写出整洁代码
    Q:开发如何才能写出整洁代码?A:开发人员可以采取以下措施来编写整洁的代码:使用有意义的变量名和函数名:使用具有描述性的变量名和函数名,以便其他人可以更容易地理解代码。编写注释:在代码中编写注释来解释代码的目的和功能。这有助于其他人更好地理解代码。使用有意义的缩进......
  • 【深度学习 | ResNet核心思想】残差连接 & 跳跃连接:让信息自由流动的神奇之道
    ......
  • 代码简洁之道:对象转换神器MapStruct
    在我们日常开发的程序中,为了各层之间解耦,一般会定义不同的对象用来在不同层之间传递数据,比如xxxDTO、xxxVO、xxxQO,当在不同层之间传输数据时,不可避免地经常需要将这些对象进行相互转换。今天给大家介绍一个对象转换工具MapStruct,代码简洁安全、性能高,强烈推荐。MapStruct简介MapSt......
  • TCP的可靠性之道:确认重传和流量控制
    TCP全称为TransmissionControlProtocol(传输控制协议),是一种面向连接的、可靠的、基于字节流的传输层通信协议,其中可靠性是相对于其他传输协议的优势点。TCP为了确保数据传输的可靠性主要做了以下几点:发送确认机制丢包重传机制滑动窗口拥塞控制TCP的传输基于字节流,记录......
  • SpringBoot 测试实践 - 2:单元测试与集成测试
    单元测试vs.集成测试只编写单测,无法测试方法之间的集成情况,而且某些需求可能会修改多个方法,这可能会影响方法对应的单测,涉及到大量的相关单测的修改,这样的维护成本很高可以把重心放在完善集成测试上,专注从外部判断程序是否符合预期。对于一些非常重要的方法,增加单元测试可以减......
  • 实现单元测试和集成测试的.NET最佳实践
    实现单元测试和集成测试的.NET最佳实践在现代软件开发中,测试是确保应用程序质量和稳定性的关键步骤。在.NET开发中,单元测试和集成测试是两种常见的测试类型,它们有助于在开发过程中及时发现和修复问题。本篇博客将介绍.NET中实现单元测试和集成测试的最佳实践,以确保您的应用程序具有......
  • 《代码整洁之道 Clean Code》学习笔记 Part 1 - 命名、注释、格式
    前段时间在看《架构整洁之道》,里面提到了:构建一个好的软件系统,应该从写整洁代码做起。毕竟,如果建筑使用的砖头质量不佳,再好的架构也无法造就高质量的建筑。趁热打铁,翻出《代码整洁之道》再刷一遍。《代码整洁之道CleanCode》学习笔记Part1衡量代码质量的唯一标准:WTF/min......