java - 如何正确关闭 JUnit-Runner?

标签 java unit-testing junit junit-runner

我通过实现org.junit.runner.Runner制作了自己的JUnit-Runner,这样我就可以使用@RunWith-Annotation来运行我的UnitTests。

它看起来有点像这样:

public class MyRunner extends Runner {

    private Context myContext;
    myContext.init();
    private final BlockJUnit4ClassRunner runner;

    public MyRunner(final Class<?> clazz) throws InitializationError {
        myContext = new Context();

        runner = new BlockJUnit4ClassRunner(clazz);
    }

    @Override
    public void run(final RunNotifier notifier) {
        runner.run(notifier);
    }

    @Override
    public Description getDescription() {
        return runner.getDescription();
    }

    public void filter(final Filter filter) throws NoTestsRemainException {
        runner.filter(filter);
    }
}

为了清理资源,我必须通过调用 MyContext.close() 来关闭 MyContext。我应该在哪里调用它,以便在测试运行后清理我的资源?

最佳答案

我不确定您想要实现什么目标,但您已经看过 JUnit's Rules

public class MyContextRule extends ExternalResource {

    private final Context myContext;

    public MyContextRule()  {
        myContext = new Context();
    }

    @Override
    protected void before() throws Throwable {
        myContext.init();
    }

    @Override
    protected void after() {
        myContext.close();
    }

}

用法:

public class MyTest {
    @ClassRule
    public static MyContextRule contextRule = new MyContextRule(); 

    //...
}

JUnit Rule 相对于 Runner 的优势在于您可以拥有多个它们,而您只能拥有一个 runner。

因此,您的自定义规则可以与您将来可能遇到的随机测试框架引入的任何运行器一起使用...

关于java - 如何正确关闭 JUnit-Runner?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40680888/

相关文章:

java - 由于抛出异常,测试失败

java - 在 maven-release-plugin 生成的标签中指定日期

java - Java中的鼠标事件

c# - 在由 UseInMemoryDatabase() 创建的 IdentityDbContext 中使用身份管理器

用于测试性能的 C++ 单元测试(综合基准)

java - 如何在执行junit时模拟某个方法?

Java Spring Controller 断点和 JUnit

java - 如何在Java数据模型类中拥有动态数据类型变量?

java - 无法为应用程序类com.sun.jersey.api.core.WebAppResourceConfig添加Jersey servlet,因为未在其上设置ApplicationPath批注

c - C语言自动生成函数指针表