偷影子的人深度书评
在测试的主题上,您在行业中听到的各种定义与盲人对大象的描述一样多。
但尼古拉斯·弗兰克尔(Nicolas Frankel)在其重要而透彻的专着《 从战ren中进行集成测试 》中,从基本定义入手,并通过直观而有趣的随意形式主义来开发了集成测试的概念。
基本前提是,单元测试是一回事 ,通常的方法测试,而相比之下,集成测试,这是两个或更多的事情进行测试。 因此,在单元测试, 由被测方法调用出优选废止或嘲笑使得仅该方法的算法被测试时,在隔离。
这从概念上简化了单元测试的概念,尤其是如何测试方法调用方法调用方法的概念,因为根据我们的定义,您根本不会调用它们,因为它们将是“集成测试”。
本书早就认为集成测试非常脆弱且难以诊断,因此不应代替单元测试而使用它们,这就是连续集成服务器通常仅测量单元测试而不是集成测试的原因。
大多数时候,集成测试要么是粗略定义的,要么是错误理解的,要么是使用不完善的。 为了最大化ROI,最重要的准则应该是:SUT(被测系统)越大,所需的代码覆盖范围越小
本书总结了第一章,并荣幸地提及了各种相关的测试类别:
- 变异测试
- 功能测试
- 安全测试
- 性能测试
第二章很好地解释了为什么可以有效地订购集成测试以及如何进行订购。
单元测试不赞成按顺序进行测试,因为测试用例不应相互依赖或依赖状态。 但是,用于单元测试的内容不应总是盲目地应用于集成测试。 特别是,白盒测试可能需要具有多个有序的细粒度方法,每个方法都可以断言系统状态。
本章深入介绍了JUnit(使用JUnit 4.x中引入的注释),包括JUnit生命周期回调和断言以及详细的示例代码。
它从单个断言规则的定义和简短讨论开始:
每个测试方法应仅提供一个断言,即测试方法的存在理由或一组紧密约束的断言,例如:
Assert.assertNotNull(list);
Assert.assertFalse(list.isEmpty());
Assert.assertEquals(1, list.size());
这样,每个断言都比上一个断言更具限制性,如果测试失败,我们将确切地知道原因(列表为空,为空或具有多个元素)。
本章还很好地处理了JUnit的各种替代框架,讨论了JUnit的优势。本书涵盖了一些确定性的JUnit选项,用于确定顺序的测试,许多开发人员可能以前从未见过:
JUnit提供了一些有关订购的基本功能。 可以通过使用org.junit。@ FixMethodOrder注释测试类来选择排序,并使用以下三个值之一:
- org.junit.runners.JVM根本不需要订购
- org.junit.runners.DEFAULT用于确定性但不可预测的排序
- org.junit.runners.NAME_ASCENDING用于基于方法名称进行排序
第3章从“测试友好的设计”开始,讨论了使代码更易于测试的流行设计模式。 接下来是存根,伪造品,模拟品和假人的讨论,以及一个代码示例,该代码示例在依赖项注入的上下文中阐明了这些内容。
这些书随后列出了各种模拟框架,包括用于创建假冒品的Spring Test和MockRunner,然后深入研究了流行的针对存根,模拟和假人的Mockito框架。还简要讨论了如何将Mockito用于行为。驱动开发,模拟“时给先”行为。
总的来说,这本书不仅列出了Api,还对它们进行了解释,然后以清晰明了的格式列出了它们。
在下一部分中,将讨论使用Spring Test框架进行的伪造,并通过大量的代码片段深入探讨Servlet和JNDI。 Spring Test明显省略了JMS,因此本书接下来讨论MockRunner,它为JMS,Struts,Servlet,Taglib,JDBC,EJB,JMS和JCA提供了伪造品。
对于每种框架,本书都介绍了选项,并讨论了为您的用例选择正确的框架的决策树。
下一章将进行坦率的讨论,讨论如何测试诸如时间之类的真实资源,例如模拟System.currentTimeMillis()以及如何使用Joda Time(现已由Java 8 Date Time API代替),文件,数据库(传统和NoSql,例如MongoDB) ),邮件和FTP,所有这些都是伪造的。 其中包括对流行的DBUnit框架的出色处理。 在本书中普遍存在,该章推荐了最佳实践和最佳工具。
本章最后讨论何时使用存根和何时使用伪造品:
有多个选择总会带来选择的麻烦。 在大多数情况下,最好使用Fake服务器,因为
- 需要更少的精力,
- 使代码更具可读性。
建议仅在测试条件确实需要存根服务器时才使用它。
随后的章节涉及各种主题,包括Web服务集成(SOAP和REST)以及关联的工具和伪造框架,自动化测试(诸如Maven和Gradle之类的构建工具,诸如Bamboo,Hudson和Jenkins之类的持续集成服务器)
本书最后以参考附录为基础,介绍了本书中提到的所有框架和工具。
读完本书后,我发现开始进行测试创建时,我通常会遇到一些对未知的恐惧。
这是一本重要而全面的书,涵盖了集成测试的所有方面,以及单元测试和其他测试技术的大量重叠。
它是使用任何语言的所有软件开发人员和项目经理的必备参考。 内容清晰,易于阅读且全面。 这本书不仅包含Apis,而且还包含最佳实践建议以及许多有用的示例
偷影子的人深度书评