原文: https://howtodoinjava.com/junit5/junit5-test-suites-examples/

使用 JUnit5 测试套件,您可以运行分散到多个测试类和不同包中的测试。 JUnit5 提供了两个注解:@SelectPackages@SelectClasses以创建测试套件。 此外,您可以使用其他注解来过滤测试包,类甚至测试方法。

  1. Table of Contents
  2. Project Structure for Test classes and Suite
  3. Create Test Suite with JUnit5 @SelectPackages
  4. Create Test Suite with JUnit5 @SelectClasses
  5. Filtering Packages with @IncludePackages and @ExcludePackages
  6. Filtering Test Classes with @IncludeClassNamePatterns and @ExcludeClassNamePatterns
  7. Filtering Tests with @IncludeTags and @ExcludeTags

测试类名称必须遵循正则表达式模式^.*Tests?$。 这意味着测试类名称必须以TestTests结尾。 例如UserMgmtTestsDeviceMgmtTest等。

1. 测试类和套件的项目结构

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

JUnit5 测试套件示例 - 图1

JUnit5 测试套件项目结构

2. 使用@SelectPackages创建测试套件

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

指定单个包

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

  1. @RunWith(JUnitPlatform.class)
  2. @SelectPackages("com.howtodoinjava.junit5.examples.packageA")
  3. public class JUnit5TestSuiteExample
  4. {
  5. }

JUnit5 测试套件示例 - 图2

@SelectPackages – 单个包示例

指定多个包

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

  1. @RunWith(JUnitPlatform.class)
  2. @SelectPackages({"com.howtodoinjava.junit5.examples.packageA","com.howtodoinjava.junit5.examples.packageB"})
  3. public class JUnit5TestSuiteExample
  4. {
  5. }

JUnit5 测试套件示例 - 图3

@SelectPackages – 多个包示例

请注意,如果我们在@SelectPackages注解中传递packageX,则将“此软件包及其所有子软件包中的测试类”用于测试套件。

3. 使用@SelectClasses创建测试套件

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

指定单个类

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

  1. @RunWith(JUnitPlatform.class)
  2. @SelectClasses( ClassATest.class )
  3. public class JUnit5TestSuiteExample
  4. {
  5. }

JUnit5 测试套件示例 - 图4

@SelectClasses – 单个类示例

指定多个类

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

  1. @RunWith(JUnitPlatform.class)
  2. @SelectClasses( { ClassATest.class, ClassBTest.class, ClassCTest.class } )
  3. public class JUnit5TestSuiteExample
  4. {
  5. }

JUnit5 测试套件示例 - 图5

@SelectClasses – 多个测试类示例

4. @IncludePackages@ExcludePackages

我们了解到@SelectPackages也会导致其所有子包都被扫描以查找测试类。 如果要排除任何特定的子包,或包括任何包,则可以使用 @IncludePackages@ExcludePackages注解。

@IncludePackages示例

  1. @RunWith(JUnitPlatform.class)
  2. @SelectPackages("com.howtodoinjava.junit5.examples")
  3. @IncludePackages("com.howtodoinjava.junit5.examples.packageC")
  4. public class JUnit5TestSuiteExample
  5. {
  6. }

这只会添加com.howtodoinjava.junit5.examples.packageC中的测试类(即ClassCTest)中的测试。

@ExcludePackages示例

  1. @RunWith(JUnitPlatform.class)
  2. @SelectPackages("com.howtodoinjava.junit5.examples")
  3. @ExcludePackages("com.howtodoinjava.junit5.examples.packageC")
  4. public class JUnit5TestSuiteExample
  5. {
  6. }

这将添加com.howtodoinjava.junit5.examples中测试类的测试,但不包括子包com.howtodoinjava.junit5.examples.packageC(即ClassATestClassBTest)中的所有测试类。

5. @IncludeClassNamePatterns@ExcludeClassNamePatterns

很多时候,在选择注解中包含所有包或测试类名称是不可行的。 在这种情况下,您可能会提供更广泛的包范围,并通过 appy 筛选将哪些测试类包括在套件中或从套件中排除。

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

@IncludeClassNamePatterns示例

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

  1. @RunWith(JUnitPlatform.class)
  2. @SelectPackages("com.howtodoinjava.junit5.examples")
  3. @IncludeClassNamePatterns({"^.*ATests?$"})
  4. public class JUnit5TestSuiteExample
  5. {
  6. }

@ExcludeClassNamePatterns示例

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

  1. @RunWith(JUnitPlatform.class)
  2. @SelectPackages("com.howtodoinjava.junit5.examples")
  3. @ExcludeClassNamePatterns({"^.*ATests?$"})
  4. public class JUnit5TestSuiteExample
  5. {
  6. }

您可以在上述注解中应用多个模式。 在多种模式的情况下,它们使用“OR”语义进行组合。 这意味着,如果类别的完全限定名称与至少一种模式匹配,则该类别将包含在测试套件中/从测试套件中排除。

6. @IncludeTags@ExcludeTags

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

@IncludeTags示例

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

  1. @RunWith(JUnitPlatform.class)
  2. @SelectPackages("com.howtodoinjava.junit5.examples")
  3. @IncludeTags("production")
  4. public class JUnit5TestSuiteExample
  5. {
  6. }

@ExcludeTags示例

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

  1. @RunWith(JUnitPlatform.class)
  2. @SelectPackages("com.howtodoinjava.junit5.examples")
  3. @ExcludeTags("development")
  4. public class JUnit5TestSuiteExample
  5. {
  6. }

显然,有多种方法在 JUnit5 中创建测试套件,并且它强烈支持过滤测试套件中的测试。

将我的问题放在评论部分。

学习愉快!

源码下载