《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集成能力。

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

相关文章
|
4月前
|
数据采集 JSON JavaScript
Cypress 插件实战:让测试更稳定,不再“偶尔掉链子”
本文分享如何通过自定义Cypress插件解决测试不稳定的痛点。插件可实现智能等待、数据预处理等能力,替代传统硬性等待,有效减少偶发性失败,提升测试效率和可维护性。文内包含具体实现方法与最佳实践。
|
5月前
|
存储 关系型数据库 测试技术
玩转n8n测试自动化:核心节点详解与测试实战指南
n8n中节点是自动化测试的核心,涵盖触发器、数据操作、逻辑控制和工具节点。通过组合节点,测试工程师可构建高效、智能的测试流程,提升测试自动化能力。
|
4月前
|
人工智能 自然语言处理 JavaScript
Playwright MCP在UI回归测试中的实战:构建AI自主测试智能体
Playwright MCP结合AI智能体,革新UI回归测试:通过自然语言驱动浏览器操作,降低脚本编写门槛,提升测试效率与覆盖范围。借助快照解析、智能定位与Jira等工具集成,实现从需求描述到自动化执行的闭环,推动测试迈向智能化、民主化新阶段。
|
4月前
|
Java 测试技术 数据库连接
【SpringBoot(四)】还不懂文件上传?JUnit使用?本文带你了解SpringBoot的文件上传、异常处理、组件注入等知识!并且带你领悟JUnit单元测试的使用!
Spring专栏第四章,本文带你上手 SpringBoot 的文件上传、异常处理、组件注入等功能 并且为你演示Junit5的基础上手体验
985 2
|
6月前
|
人工智能 缓存 测试技术
Playwright进阶指南 (6) | 自动化测试实战
2025企业级测试解决方案全面解析:从单元测试到千级并发,构建高可用测试体系。结合Playwright智能工具,解决传统测试维护成本高、环境依赖强、执行效率低等痛点,提升测试成功率,内容从测试架构设计、电商系统实战框架、高级测试策略、Docker化部署、CI/CD集成及AI测试应用,助力测试工程师掌握前沿技术,打造高效稳定的测试流程。
Playwright进阶指南 (6) | 自动化测试实战
|
5月前
|
人工智能 数据可视化 测试技术
AI 时代 API 自动化测试实战:Postman 断言的核心技巧与实战应用
AI 时代 API 自动化测试实战:Postman 断言的核心技巧与实战应用
710 11
|
6月前
|
算法 测试技术 API
从自学到实战:一位测试工程师的成长之路
在技术快速发展的今天,自动化测试已成为提升职场竞争力的关键技能。本文讲述了一位测试工程师从自学到实战的成长之路,分享他在学习UI、APP和API自动化过程中遇到的挑战,以及如何通过实际项目磨炼技术、突破瓶颈。他从最初自学的迷茫,到实战中发现问题、解决问题,再到得到导师指导,逐步掌握测试开发的核心思维,并向测试平台建设方向迈进。文章总结了他从理论到实践、从执行到思考的转变经验,强调了实战、导师指导和技术服务于业务的重要性。最后,邀请读者分享自己的技术突破故事,共同交流成长。
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。
|
8月前
|
Java 测试技术 容器
Jmeter工具使用:HTTP接口性能测试实战
希望这篇文章能够帮助你初步理解如何使用JMeter进行HTTP接口性能测试,有兴趣的话,你可以研究更多关于JMeter的内容。记住,只有理解并掌握了这些工具,你才能充分利用它们发挥其应有的价值。+
1232 23
|
10月前
|
SQL 安全 测试技术
2025接口测试全攻略:高并发、安全防护与六大工具实战指南
本文探讨高并发稳定性验证、安全防护实战及六大工具(Postman、RunnerGo、Apipost、JMeter、SoapUI、Fiddler)选型指南,助力构建未来接口测试体系。接口测试旨在验证数据传输、参数合法性、错误处理能力及性能安全性,其重要性体现在早期发现问题、保障系统稳定和支撑持续集成。常用方法包括功能、性能、安全性及兼容性测试,典型场景涵盖前后端分离开发、第三方服务集成与数据一致性检查。选择合适的工具需综合考虑需求与团队协作等因素。
1612 24