JUnit 5 测试套件 是用@Suite 注释编写的。套件帮助我们运行分布到多个类和包中的测试。
我们可以使用 Include 和 Exclude 注释(在本教程后面讨论)来过滤测试包、测试类甚至测试方法。
@RunWith(JUnitPlatform.class)已被弃用,取而代之的是@Suite
注释,并将在 JUnit Platform 2.0 中删除。
对于此示例,我们使用以下项目结构。
要运行套件,请包含 junit-platform-suite-engine 依赖项(1.8 或更高版本)。
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite-engine</artifactId>
<version>1.8.1</version>
</dependency>
创建套件很容易。只需添加一个类的 @Suite
注释,然后开始在套件中包含或排除测试类和方法。
当我们想要运行该套件时,只需将它作为一个普通的 JUnit 测试类运行,它就会执行该套件中包含的所有测试。
import org.junit.platform.suite.api.IncludeTags;
import org.junit.platform.suite.api.SelectPackages;
import org.junit.platform.suite.api.Suite;
@SelectPackages({"com.cundage.junit5.examples.packageA"
,"com.cundage.junit5.examples.packageB"})
@IncludeTags("production")
@Suite
public class JUnit5TestSuiteExample {
}
使用此注释为在 JUnit 平台上作为测试套件执行的带注释的测试类提供显示名称。
显示名称通常用于 IDE 和构建工具中的测试报告,可能包含空格、特殊字符,甚至表情符号。
@IncludeTags("production")
@Suite
@SuiteDisplayName("A demo Test Suite")
public class JUnit5TestSuiteExample {
}
JUnit 5 提供了以下注释来包含或排除套件中的测试。
让我们详细了解这些注释。
@SelectPackages
指定通过 @RunWith(JUnitPlatform.class)
运行测试套件时要选择的包的名称。
将“packageName”作为参数传递给 @SelectPackages
注释。
@Suite
@SelectPackages("com.cundage.junit5.examples.packageA")
public class JUnit5TestSuiteExample
{
}
将参数中的包名称作为字符串数组(在花括号 {}
内)传递给 @SelectPackages
注释。
@Suite
@SelectPackages({"com.cundage.junit5.examples.packageA",
"com.cundage.junit5.examples.packageB"})
public class JUnit5TestSuiteExample
{
}
请注意,如果我们在
@SelectPackages
注释中传递 'com.demo.app',那么测试类出现在包 'com.demo.app' 及其所有子类中-packages 将被选择用于测试套件。
@SelectClasses
指定通过 @RunWith(JUnitPlatform.class)
运行测试套件时要选择的类。
将 ClassName.class
作为参数传递给 @SelectClasses
注释。
@Suite
@SelectClasses( ClassATest.class )
public class JUnit5TestSuiteExample
{
}
将参数中的类名作为数组(在花括号 {}
内)传递给 @SelectClasses
注释。
@Suite
@SelectClasses( { ClassATest.class, ClassBTest.class, ClassCTest.class } )
public class JUnit5TestSuiteExample
{
}
我们了解到 @SelectPackages
会导致其所有子包也被扫描以查找测试类。
如果您想排除任何特定包或包含任何包,那么您可以使用 @IncludePackages 和 @ExcludePackages 注释。
@Suite
@SelectPackages("com.cundage.junit5.examples")
@IncludePackages("com.cundage.junit5.examples.packageC")
public class JUnit5TestSuiteExample
{
}
这将仅从 com.howtodoinjava.junit5.examples.packageC
中的测试类添加测试,即 ClassCTest
。
@Suite
@SelectPackages("com.cundage.junit5.examples")
@ExcludePackages("com.cundage.junit5.examples.packageC")
public class JUnit5TestSuiteExample
{
}
这将从 com.howtodoinjava.junit5.examples
中的测试类添加测试,但从子包 com.howtodoinjava.junit5.examples.packageC
中排除所有测试类,即 ClassATest
和 ClassBTest
。
很多时候在选择注释中包含所有包或测试类名称是不可行的。在这种情况下,您可以提供更广泛的包范围,并对要包含或排除在套件中的测试类应用过滤。
要指定要排除或包含的测试类名称模式,您可以使用 @IncludeClassNamePatterns 和 @ExcludeClassNamePatterns 注释。
包括名称以 ATest
或 ATests
结尾的所有测试类。
@Suite
@SelectPackages("com.cundage.junit5.examples")
@IncludeClassNamePatterns({"^.*ATests?$"})
public class JUnit5TestSuiteExample
{
}
排除名称以 ATest
或 ATests
结尾的所有测试类。
@Suite
@SelectPackages("com.cundage.junit5.examples")
@ExcludeClassNamePatterns({"^.*ATests?$"})
public class JUnit5TestSuiteExample
{
}
您可以在上述注释中应用多个模式。在多个模式的情况下,它们使用
OR
语义组合。这意味着如果类的完全限定名称与至少一种模式匹配,则该类将被包含/排除在测试套件之外。
在企业应用程序中,您可能已经标记了要在特定环境中运行的测试用例,例如开发或生产。您也可以从测试套件中包含或排除基于这些标签的测试。
该测试套件将在包 production
(及其子包)内运行所有标记有 com.howtodoinjava.junit5.examples
的测试。
@Suite
@SelectPackages("com.cundage.junit5.examples")
@IncludeTags("production")
public class JUnit5TestSuiteExample
{
}
此测试套件将排除包 development
(及其子包)内所有标记有 com.howtodoinjava.junit5.examples
的测试。
@Suite
@SelectPackages("com.cundage.junit5.examples")
@ExcludeTags("development")
public class JUnit5TestSuiteExample
{
}
显然,有多种方法可以在 JUnit 5 中创建测试套件,并且它对过滤进/出测试套件的测试提供了强大的支持。
默认情况下 mvn test
将运行应用程序中的所有测试和套件。
使用 Maven surefire 插件的 configuration
和 test
元素将测试套件和类包含在测试执行中。在以下示例中,我们正在执行单个套件 TempDirectoryTestSuite。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M7</version>
<configuration>
<test>com.cundage.junit5.examples.suites.TempDirectoryTestSuite</test>
</configuration>
</plugin>
我尝试使用 JVM 系统属性
test
从命令行运行上述套件,但它正在执行应用程序中的所有测试和套件。让我知道它是否适合您。
如果我们想排除一些测试类和套件,我们可以使用 exclude 标签。
<configuration>
<excludes>
<exclude>some test to exclude here</exclude>
</excludes>
</configuration>
快乐学习!!
标签2: JUnit 5地址:https://www.cundage.com/article/junit5-test-suites-examples.html