《JUnit实战(第2版)》—第2章2.4节用Suite来组合测试

简介:

本节书摘来自异步社区《JUnit实战(第2版)》一书中的第2章2.4节用Suite来组合测试,作者【美】Petar Tahchiev , Felipe Leme , Vincent Massol , Gary Gregory,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.4 用Suite来组合测试
JUnit实战(第2版)
因为是一个简单的测试,所以你可以直接编译如代码2.1所示的简单的计算器测试程序,并把它交给控制台façade运行器,如下所示:


8b4369ed854fd77a6a73ed9faa9fbab0a6c31838

如果类路径配置正确的话,那么测试应当顺利运行。这非常简单—至少运行这么一个单独的测试用例是非常简单的。

2.4.1 组合一组测试类
下一步就是运行多个测试类。为了简化这个任务,JUnit提供了测试Suite。这个Suite是一个容器,用来把几个测试归在一起,并把它们作为一个集合一起运行。

JUnit设计Suite的目的就是为了运行一个或者多个测试用例。测试运行器会启动Suite;然后运行哪个测试用例是由Suite来决定的。

你可能会疑惑,在第1章最后给出的那个示例中,你并没有定义一个Suite,这个示例是如何运行起来的呢?为了使简单的事情可以保持简单,如果你没有提供一个自己的Suite,那么测试运行器会自动创建一个Suite。

默认的Suite会扫描你的测试类,找出所有以@Test注释的方法。默认的Suite会在内部为每个@Test方法创建一个测试类的实例。然后JUnit就会独立地执行每个@Test方法,以避免潜在的负面影响。

如果你想将另一个测试添加到CalculatorTest类,比如testSubtract,同时你使用@Test注释这个测试,那么默认的Suite就会自动包含这个测试。

Suite对象其实是一个Runner,可以执行测试类中所有@Test注释的方法。

代码2.3显示了如何将多个测试类组合成一个单独的测试集(test suite)。

代码2.3 将测试类组合为一个Suite


<ahttps://yqfile.alicdn.com/7682d282dcf8ff176ce70e97480582693102def7.jpeg" >

在代码2.3中,我们使用@RunWith注释指定了相应的运行器..Lucene实战1.tif,并且通过在@SuiteClasses注释中指定测试类,来列出我们想要在这个测试中包含的所有测试..Lucene实战2.tif。这些测试类中的所有@Test方法都将包含到该Suite中。

对于代码2.1中的CalculatorTest而言,默认的Suite可以用以下代码来表示:


b54e86a87aac18af2cda9102c810ecc525b21152

2.4.2 组合一组测试集
由于JUnit采用了一种精妙的构建方式,所以使用JUnit来创建一组测试集也就成为了可能。例如,代码2.4串联了几个不同的文件,以展示多个测试用例是如何组合成多个测试集,然后这些测试集又组合成了一个主测试集。

代码2.4 一组测试集


e8e2d60e1d640b372b651e408d8a88b0e371f721

为了简化这个示例,我们的测试集TestSuiteA与TestSuiteB分别只有一个测试用例。而真正的测试集应该包含多个测试类,就像我们的主测试集。

你可以运行这段代码中的任何一个类,比如一个JUnit测试、两个测试类中的任意一个、两个测试集中的任意一个,甚至是主测试集。图2.2展示了在Eclipse中运行主测试集后的结果。


ebfb70fe89fe26aa0388b9905f6804b9f693d656

测试集提供了一种强有力的组织测试的方式。当然,这种便利性并非JUnit独有,在下一小节中你将会看到,其他工具也具有这样的功能,这将使我们重新考虑任何JUnit测试集的创建。

2.4.3 Suite、IDE、Ant与Maven
Ant与Maven也提供了运行多组测试类和测试集的功能,你可以通过正则表达式的类型、要运行的测试类和测试集的名称来指定运行哪些测试类和测试集。另外,有些IDE(比如Eclipse)允许你在某个指定的包或者源代码目录中运行所有的测试类与Suite。这足以让我们重新考虑是否值得在最初的地方创建JUnit的Suite。

当然,如果你想在Java环境中组织你的测试,而不依赖于你的构件系统能力,那么JUnit的Suite是非常有用的。因为一般情况下构建系统都是由专门的人员或者团队来维护,而不是开发者自己。同样,你可能不希望依赖于任何指定的IDE以及它的JUnit集成能力。

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

相关文章
|
1月前
|
IDE Java 测试技术
使用JUnit进行单元测试:提高Java Web应用的稳定性和可靠性
【4月更文挑战第3天】本文介绍了JUnit,一个广泛使用的Java单元测试框架,由Kent Beck和Erich Gamma创建。JUnit核心特性包括注解、断言、测试套件、测试监听器和异常测试。在Java Web应用中,单元测试主要针对模型层。使用JUnit测试涉及设置环境、编写测试类、标记测试方法及运行和分析结果。单元测试能提早发现问题、简化调试、保证代码质量、促进重构并作为实时文档。掌握JUnit对提升软件质量和效率至关重要。
|
2月前
|
Java 测试技术 Spring
Spring Boot 基于 JUnit 5 实现单元测试
Spring Boot 基于 JUnit 5 实现单元测试
28 0
|
1月前
|
Java 测试技术 程序员
junit单元测试
junit单元测试
|
3天前
|
测试技术
测试基础 Junit单元测试框架
测试基础 Junit单元测试框架
11 2
测试基础 Junit单元测试框架
|
4天前
|
Java 测试技术 持续交付
自动化测试框架选型与实战:深入探索与应用
【5月更文挑战第8天】本文探讨了自动化测试框架的选型与实战应用,强调了其在软件质量保障中的重要性。选型原则包括考虑项目需求、技术栈、可扩展性和可维护性,以及社区支持和文档。介绍了Selenium、Appium、JUnit和Pytest等常用框架,并概述了实战应用的步骤,包括明确需求、搭建环境、编写测试用例、执行测试、分析结果、维护代码和持续集成。合理选型与实践能提升测试效率,保障项目成功。
|
4天前
|
算法 测试技术 开发者
测试驱动开发(TDD)实战:从理论到实践
【5月更文挑战第8天】TDD实战指南:先测试后开发,确保代码质量与可维护性。核心思想是编写测试用例→实现代码→验证→重构。优点包括提高代码质量、促进设计思考和增强可测试性。实战步骤包括编写独立、明确的测试用例,遵循最小可用原则编写代码,运行测试并分析失败原因,以及在验证通过后进行代码重构与优化。通过TDD,开发者能提升编程技能和项目成功率。
|
12天前
|
SQL 人工智能 自然语言处理
让老板成为数据分析师--ChatGpt链接本地数据源实战测试
本文探究ChatGpt等AI机器人能否帮助老板快速的做数据分析?用自然语言同老板进行沟通,满足老板的所有数据分析的诉求?
|
26天前
|
Java 测试技术 API
使用JUnit进行Java单元测试
【4月更文挑战第16天】本文介绍了如何使用JUnit进行Java单元测试。JUnit是一个由Erich Gamma和Kent Beck创建的开源Java测试框架,用于简化测试用例编写并自动执行测试。文章涵盖了JUnit的基本结构,如使用`@Test`注解标记测试方法,以及断言方法如`assertEquals`和`assertTrue`来验证测试结果。此外,还讨论了测试套件的创建,用于组合运行多个测试类,并介绍了模拟对象的概念,允许开发者使用Mockito等库来模拟依赖对象。学习和应用JUnit能提升代码质量并确保软件稳定性。
|
1月前
|
Java 测试技术 Maven
Spring整合JUnit实现单元测试
本文介绍了如何在Java开发中使用Spring与JUnit进行单元测试。首先,设置JUnit和Spring环境,创建待测试的业务逻辑类,如MyService。接着,编写JUnit测试类MyServiceTest,使用`@RunWith(SpringJUnit4ClassRunner.class)`和`@ContextConfiguration`注解,注入并测试MyService的方法。此外,借助Mockito模拟依赖对象,以及使用Spring TestContext框架进行集成测试,确保测试的隔离性和环境的稳定性。通过这些方法,可以提升代码质量和测试效率。
28 1
|
2月前
|
XML Java 测试技术
【Java优化实战】「微基准系列」带你脚踏实地的进行开发和使用JMH测试和提升应用程序和服务指南
【Java优化实战】「微基准系列」带你脚踏实地的进行开发和使用JMH测试和提升应用程序和服务指南
53 1