所有 junit 测试后的清理

2022-08-31 21:10:40

在我的项目中,我必须在所有测试之前进行一些存储库设置。这是使用一些棘手的静态规则完成的。但是,我不知道如何在所有测试后进行清理。我不想保留一些神奇的静态数字来引用所有测试方法的数量,我应该一直保持。

最值得赞赏的方法是添加一些侦听器,这些侦听器将在所有测试后调用。JUnit4中已经有任何接口了吗?


编辑:这与@BeforeClass无关,@AfterClass,因为我必须知道最后一次是否调用了用@AfterClass注释的方法。


答案 1

我使用的是JUnit 4.9。这会有帮助吗?

import junit.framework.TestCase;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;

@RunWith(Suite.class)
@SuiteClasses({First.class,Second.class,Third.class})
public class RunTestSuite extends TestCase {
    @BeforeClass
    public static void doYourOneTimeSetup() {
        ...
    }

    @AfterClass
    public static void doYourOneTimeTeardown() {
        ...
    }    
}

编辑:我非常肯定(除非我误解了你的问题),我的解决方案就是你正在寻找的。即,在所有测试运行后使用一种拆卸方法。不需要监听器,JUnit 具有此功能。谢谢。


答案 2

我建议使用 org.junit.runner.notification.RunListener,例如:

public class TestListener extends RunListener {
  @Override
  public void testRunStarted(Description description) throws Exception {
     // Called before any tests have been run.
  }
  @Override
  public void testRunFinished(Result result) throws Exception {
     // Called when all tests have finished
  }
}

直接在 JUnit java 文档中阅读更多内容。即使使用Maven的surefire(单元测试)插件或故障安全插件(集成测试),也可以通过将以下代码添加到插件配置中来使用它:

<properties>
  <property>
    <name>listener</name>
    <value>com.innovatrics.afismq.it.TestListener</value>
  </property>
</properties>

推荐