章
目
录
JUnit 5测试套件使用@Suite注解进行编写。套件有助于我们运行分散在多个类和包中的测试。
我们可以使用Include和Exclude注解(稍后在本文档中讨论)来过滤测试包、测试类或甚至测试方法。
1.项目结构和Maven依赖项
要运行套件,包括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
{
}
3.1.1. 指定单个包
将 “packageName” 作为参数传递给 @SelectPackages 注解。
3.1.2. 指定多个包
将包名作为字符串数组(在花括号 {} 中)传递给 @SelectPackages 注解的参数。
@Suite
@SelectPackages({"com.howtodoinjava.junit5.examples.packageA",
"com.howtodoinjava.junit5.examples.packageB"})
public class JUnit5TestSuiteExample
{
}
请注意,如果我们在 @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
{
}
3.2.2. 指定多个测试类
将类名作为数组(在花括号 {} 中)传递给 @SelectClasses 注解的参数。
@Suite
@SelectClasses( { ClassATest.class, ClassBTest.class, ClassCTest.class } )
public class JUnit5TestSuiteExample
{
}
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>
如果我们想要排除一些测试类和套件,我们可以使用 exclude 标签。
<configuration>
<excludes>
<exclude>一些需要排除的测试</exclude>
</excludes>
</configuration>