带有示例的 JUnit 5 测试套件

位置:首页>文章>详情   分类: Java教程 > 编程技术   阅读(359)   2023-06-26 07:54:18

JUnit 5 测试套件 是用@Suite 注释编写的。套件帮助我们运行分布到多个类和包中的测试。

我们可以使用 Include 和 Exclude 注释(在本教程后面讨论)来过滤测试包、测试类甚至测试方法。

@RunWith(JUnitPlatform.class) 已被弃用,取而代之的是 @Suite 注释,并将在 JUnit Platform 2.0 中删除。

一、项目结构及Maven依赖

对于此示例,我们使用以下项目结构。

JUnit 5 Test Suite Project Structure

要运行套件,请包含 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 注释,然后开始在套件中包含或排除测试类和方法。

当我们想要运行该套件时,只需将它作为一个普通的 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 {

}

3.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) 运行测试套件时要选择的包的名称。

3.1.1.指定单个包裹

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

@Suite
@SelectPackages("com.cundage.junit5.examples.packageA")
public class JUnit5TestSuiteExample
{
}
@SelectPackages - Single Package Example

3.1.2.指定多个包

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

@Suite
@SelectPackages({"com.cundage.junit5.examples.packageA",
                     "com.cundage.junit5.examples.packageB"})
public class JUnit5TestSuiteExample
{
}
@SelectPackages - Multiple Packages Example

请注意,如果我们在 @SelectPackages 注释中传递 'com.demo.app',那么测试类出现在包 'com.demo.app' 及其所有子类中-packages 将被选择用于测试套件。

3.2. @SelectClasses

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

3.2.1.指定单个测试类

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

@Suite
@SelectClasses( ClassATest.class )
public class JUnit5TestSuiteExample
{
}
@SelectClasses - Single Class Example

3.2.2.指定多个测试类

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

@Suite
@SelectClasses( { ClassATest.class, ClassBTest.class, ClassCTest.class } )
public class JUnit5TestSuiteExample
{
}
@SelectClasses - Multiple Test Classes Example

3.3. @IncludePackages 和@ExcludePackages

我们了解到 @SelectPackages 会导致其所有子包也被扫描以查找测试类。

如果您想排除任何特定包或包含任何包,那么您可以使用 @IncludePackages@ExcludePackages 注释。

3.3.1. @IncludePackages 示例

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

这将仅从 com.howtodoinjava.junit5.examples.packageC 中的测试类添加测试,即 ClassCTest

3.3.2. @ExcludePackages 示例

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

这将从 com.howtodoinjava.junit5.examples 中的测试类添加测试,但从子包 com.howtodoinjava.junit5.examples.packageC 中排除所有测试类,即 ClassATestClassBTest

3.4. @IncludeClassNamePatterns 和@ExcludeClassNamePatterns

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

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

3.4.1. @IncludeClassNamePatterns 示例

包括名称以 ATestATests 结尾的所有测试类。

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

3.4.2. @ExcludeClassNamePatterns 示例

排除名称以 ATestATests 结尾的所有测试类。

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

您可以在上述注释中应用多个模式。在多个模式的情况下,它们使用 OR 语义组合。

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

3.5. @IncludeTags 和@ExcludeTags

在企业应用程序中,您可能已经标记了要在特定环境中运行的测试用例,例如开发或生产。您也可以从测试套件中包含或排除基于这些标签的测试。

3.5.1. @IncludeTags 示例

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

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

3.5.2. @ExcludeTags 示例

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

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

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

4. 运行单个测试套件

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

使用 Maven surefire 插件的 configurationtest 元素将测试套件和类包含在测试执行中。在以下示例中,我们正在执行单个套件 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

相关阅读

学习使用 Maven 配置 JUnit 5、不同的 JUnit 模块以及如何使用这些模块来创建和执行测试。 请注意,JUnit 5 在运行时至少需要 Java 8。 1. JUnit 5 Mav...
学习使用 Gradle 配置 JUnit 5、它的不同模块以及如何使用它们来创建和执行测试。 请注意,JUnit 5 在运行时需要 Java 8。 1. JUnit 5 Gradle 依赖 要通...
在这个 JUnit 5 教程中,我们将学习如何在新支持的 创建 XML 报告 -team/open-test-reporting"&gtl;打开测试报告格式并以旧格式生成它们以实现向后兼容性。 ...
Eclipse 为 JUnit 测试用例提供了出色的工具支持。在 Eclipse 中为 JUnit 测试用例配置代码模板 是加快测试开发的完美补充。 学习在 Eclipse 中创建和导入 JUn...
JUnit 5 @ BeforeAll 注解表示一个方法,它是一个生命周期方法。 @BeforeAll 是 JUnit 4 中 @BeforeClass 注解的替代品。 1. @BeforeAl...
@AfterEach 注释用于表示被注释的方法应该在每个 @Test @RepeatedTest、@ParameterizedTest 或@TestFactory 当前类中的方法。 JUnit ...
在 JUnit 5 中,@BeforeEach 注释用于指示在每次调用 @Test、@RepeatedTest&lt; 之前应执行注释的方法/em&gtl;、@ParameterizedTest...
在 JUnit 5 中,非常不鼓励编写有序测试,在某些情况下,测试执行顺序可能成为测试应用程序功能的重要因素,例如 集成测试。 例如,我们可能希望对用户管理模块进行集成测试,其中测试应按以下方式...
JUnit 5 @ AfterAll 注解替代了 JUnit 4 中的 @AfterClass 注解。它用作测试类的拆卸方法。 @AfterAll 用于表示注释的方法应该在当前测试类中的所有测试...
JUnit 5 假设 类提供static 方法来支持基于假设的条件测试执行。失败的假设会导致测试中止。 假设ns 通常在继续执行给定测试方法没有意义时使用。在测试报告中,这些测试将被标记为通过。...