java - 如何仅在标记测试后运行清理方法?

标签 java junit junit5

我正在为我的 Java 项目编写 JUnit 5 测试。

我有一些需要耗时清理的测试方法(在每个方法之后)。理想情况下,我想用一些注释标记它们并仅为它们运行清理方法。

这是我尝试过的:

class MyTest {

    @AfterEach
    @Tag("needs-cleanup")
    void cleanup() {
        //do some complex stuff
    }

    @Test
    void test1() {
         //do test1
    }

    @Test
    @Tag("needs-cleanup")
    void test2() {
         //do test2
    }
}

我希望 cleanup 方法仅在 test2 之后运行。但它实际上是在两次测试之后运行的。

是否可以通过 JUnit 5 注释的某种组合来实现它?我不想将我的测试类分成几个类或直接从测试方法调用 cleanup

最佳答案

您可以注入(inject)TestInfo进入测试并检查测试注释的标签:

class MyTest {
  private TestInfo testInfo;

  MyTest(TestInfo testInfo) {
    this.testInfo = testInfo;
  }

  @AfterEach
  void cleanup() {
    if (this.testInfo.getTags().contains("needs-cleanup")) {
        // .. do cleanup
    } 
  }

  @Test
  void test1() {
     //do test1
  }

  @Test
  @Tag("needs-cleanup")
  void test2() {
     //do test2
  }

}

关于java - 如何仅在标记测试后运行清理方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52194480/

相关文章:

java - 提取 zip 文件被拒绝访问

java - 使用标志显示一次 AlertDialog

java - JUnit assertFalse(true) --> 成功的测试用例?

运行 junit 测试用例时,使用 org.json.JSONTokener 进行架构验证失败时出现 java.lang.NoSuchMethodError

java - 当公共(public)方法具有私有(private)方法依赖性时如何测试公共(public)方法

java - hibernate 中的 BLOB

java - 使用递归方法通过控制流中断 Java 循环的迭代

java - 编译依赖于jar文件的java文件

spring-boot - @IfProfileValue 不适用于 JUnit 5 SpringExtension

junit5 - Eclipse 中的 "Add JUnit library"没有 "Junit 5"选项