行业资讯 2025年08月6日
0 收藏 0 点赞 482 浏览 4842 个字
摘要 :

文章目录 1.项目结构和Maven依赖项 2.创建测试套件 2.1 @Suite 2.2 @SuiteDisplayName 3. 包括和排除测试 3.1 @SelectPackages 3.1.1. 指定单个包 3.1.2. 指定多个……




  • 1.项目结构和Maven依赖项
  • 2.创建测试套件
    • 2.1 @Suite
    • 2.2 @SuiteDisplayName
  • 3. 包括和排除测试
    • 3.1 @SelectPackages
      • 3.1.1. 指定单个包
      • 3.1.2. 指定多个包
    • 3.2 @SelectClasses
      • 3.2.1. 指定单个测试类
      • 3.2.2. 指定多个测试类
    • 3.3. @IncludePackages 和 @ExcludePackages
      • 3.3.1. @IncludePackages 例子
      • 3.3.2. @ExcludePackages 例字
    • 3.4. @IncludeClassNamePatterns 和 @ExcludeClassNamePatterns
      • 3.4.1. @IncludeClassNamePatterns 例子
      • 3.4.2. @ExcludeClassNamePatterns 例子
    • 3.5 @IncludeTags 和 @ExcludeTags
      • 3.5.1. @IncludeTags 例子
      • 3.5.2. @ExcludeTags 例子
  • 4.运行单个测试套件

JUnit 5测试套件使用@Suite注解进行编写。套件有助于我们运行分散在多个类和包中的测试。

我们可以使用Include和Exclude注解(稍后在本文档中讨论)来过滤测试包、测试类或甚至测试方法。

@RunWith(JUnitPlatform.class)已被弃用,转而使用@Suite注解,并将在JUnit平台2.0中删除。

1.项目结构和Maven依赖项

对于这个例子,我们使用以下项目结构。JUnit 5测试套件@Suite注解详解

要运行套件,包括junit-platform-suite-engine依赖项(版本1.8或更高版本)。

<dependency>
    <groupId>org.junit.platform</groupId>
    <artifactId>junit-platform-suite-engine</artifactId>
    <version>1.8.1</version>
</dependency>

2.创建测试套件

2.1 @Suite

创建套件很容易。只需向一个类添加@Suite注解,并开始将测试类和测试方法纳入或排除在套件中。

当我们想要运行套件时,只需将其作为普通的JUnit测试类运行,它将执行套件中包含的所有测试。

@SelectPackages({\"com.howtodoinjava.junit5.examples.packageA\"
                ,\"com.howtodoinjava.junit5.examples.packageB\"})
@IncludeTags(\"production\")
@Suite
public class JUnit5TestSuiteExample {
}

2.2 @SuiteDisplayName

使用此注解为在JUnit平台上作为测试套件执行的注释的测试类提供显示名称。

显示名称通常用于IDE和构建工具中的测试报告,并可能包含空格、特殊字符和表情符号。

@IncludeTags(\"production\")
@Suite
@SuiteDisplayName(\"A demo Test Suite\")
public class JUnit5TestSuiteExample {
}

3. 包括和排除测试

JUnit 5提供以下注解来包括或排除套件中的测试。

  • @SelectClasses
  • @SelectPackages
  • @IncludePackages
  • @ExcludePackages
  • @IncludeClassNamePatterns
  • @ExcludeClassNamePatterns
  • @IncludeTags
  • @ExcludeTags

让我们详细了解这些注解。

3.1 @SelectPackages

@SelectPackages 用于指定通过 @RunWith(JUnitPlatform.class) 运行测试套件时要选择的包名。

@Suite
@SelectPackages(\"com.howtodoinjava.junit5.examples.packageA\")
public class JUnit5TestSuiteExample
{
}

JUnit 5测试套件@Suite注解详解

3.1.1. 指定单个包

将 “packageName” 作为参数传递给 @SelectPackages 注解。

3.1.2. 指定多个包

将包名作为字符串数组(在花括号 {} 中)传递给 @SelectPackages 注解的参数。

@Suite
@SelectPackages({\"com.howtodoinjava.junit5.examples.packageA\",
                     \"com.howtodoinjava.junit5.examples.packageB\"})
public class JUnit5TestSuiteExample
{
}

JUnit 5测试套件@Suite注解详解

请注意,如果我们在 @SelectPackages 注解中传递 ‘com.demo.app’,则包 ‘com.demo.app’ 中和其所有子包中的测试类都将被选入测试套件中。

3.2 @SelectClasses

@SelectClasses 注解指定了通过 @RunWith(JUnitPlatform.class) 运行测试套件时要选择的类。

3.2.1. 指定单个测试类

将 ClassName.class 作为参数传递给 @SelectClasses 注解。

@Suite
@SelectClasses( ClassATest.class )
public class JUnit5TestSuiteExample
{
}

JUnit 5测试套件@Suite注解详解

3.2.2. 指定多个测试类

将类名作为数组(在花括号 {} 中)传递给 @SelectClasses 注解的参数。

@Suite
@SelectClasses( { ClassATest.class, ClassBTest.class, ClassCTest.class } )
public class JUnit5TestSuiteExample
{
}

JUnit 5测试套件@Suite注解详解

3.3. @IncludePackages 和 @ExcludePackages

我们知道 @SelectPackages 会导致其所有子包也被扫描以寻找测试类。如果您想排除任何特定包或包含任何包,则可以使用 @IncludePackages 和 @ExcludePackages 注解。

3.3.1. @IncludePackages 例子

@Suite
@SelectPackages(\"com.howtodoinjava.junit5.examples\")
@IncludePackages(\"com.howtodoinjava.junit5.examples.packageC\")
public class JUnit5TestSuiteExample
{
}

这只会添加来自 com.howtodoinjava.junit5.examples.packageC 中的测试类,即 ClassCTest。

3.3.2. @ExcludePackages 例字

@Suite
@SelectPackages(\"com.howtodoinjava.junit5.examples\")
@ExcludePackages(\"com.howtodoinjava.junit5.examples.packageC\")
public class JUnit5TestSuiteExample
{
}

这会从 com.howtodoinjava.junit5.examples 中的测试类中添加测试,但会排除 com.howtodoinjava.junit5.examples.packageC 中的所有测试类,即 ClassATest 和 ClassBTest。

3.4. @IncludeClassNamePatterns 和 @ExcludeClassNamePatterns

很多时候,将所有包或测试类名包含在选择注解中并不可行。在这种情况下,您可以提供一个更广泛的包范围,并对要包含或排除的测试类应用过滤。

要指定要排除或包含的测试类名模式,您可以使用 @IncludeClassNamePatterns 和 @ExcludeClassNamePatterns 注解。

3.4.1. @IncludeClassNamePatterns 例子

包含所有以 ATest 或 ATests 结尾的测试类名。

@Suite
@SelectPackages(\"com.howtodoinjava.junit5.examples\")
@IncludeClassNamePatterns({\"^.*ATests?$\"})
public class JUnit5TestSuiteExample
{
}

3.4.2. @ExcludeClassNamePatterns 例子

排除所有以 ATest 或 ATests 结尾的测试类名。

@Suite
@SelectPackages(\"com.howtodoinjava.junit5.examples\")
@ExcludeClassNamePatterns({\"^.*ATests?$\"})
public class JUnit5TestSuiteExample
{
}

您可以在上述注解中使用多个模式。如果有多个模式,它们将使用 OR 语义组合。

这意味着如果一个类的全名匹配至少一个模式,该类将被包含/排除在测试套件之外。

3.5 @IncludeTags 和 @ExcludeTags

在企业应用程序中,您可能有标记的测试用例,您想在特定的环境(例如开发或生产)中运行。您也可以根据这些标签从测试套件中包括或排除测试。

3.5.1. @IncludeTags 例子

此测试套件将运行标记为 production 的 com.howtodoinjava.junit5.examples 包(及其子包)中的所有测试。

@Suite
@SelectPackages(\"com.howtodoinjava.junit5.examples\")
@IncludeTags(\"production\")
public class JUnit5TestSuiteExample
{
}

3.5.2. @ExcludeTags 例子

此测试套件将排除标记为 development 的 com.howtodoinjava.junit5.examples 包(及其子包)中的所有测试。

@Suite
@SelectPackages(\"com.howtodoinjava.junit5.examples\")
@ExcludeTags(\"development\")
public class JUnit5TestSuiteExample
{
}

 

显然,在 JUnit 5 中创建测试套件有多种方法,它对过滤到/从测试套件的测试提供了强大的支持。

4.运行单个测试套件

默认情况下,mvn test 将运行应用程序中的所有测试和套件。

使用 Maven surefire 插件的配置和测试元素来包含测试执行中的测试套件和类。在以下示例中,我们正在执行单个套件 TempDirectoryTestSuite。

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>3.0.0-M7</version>
  <configuration>
    <test>com.howtodoinjava.junit5.examples.suites.TempDirectoryTestSuite</test>
  </configuration>
</plugin>

我尝试使用 JVM 系统属性 test 从命令行运行上面的套件,但它执行应用程序中的所有测试和套件。请让我知道它是否适用于您。

如果我们想要排除一些测试类和套件,我们可以使用 exclude 标签。

<configuration>
  <excludes>
      <exclude>一些需要排除的测试</exclude>
  </excludes>
</configuration>

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/9517.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号