我通过实现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 Rule
s ?
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/