Java JUnit RunNotifier和fireTestRunFinished
我试图从Ant(1.8.2,支持junit4)执行一些Arquillian测试,但是Ant任务似乎没有调用RunNotifier.fireTestRunFinished(),Arquillian测试运行程序依赖于此从容器中取消部署Arquillian jmx war。 JUnit的Eclipse集成调用了未完成的方法,从那里一切都正常工作 我环顾junit javadoc,在RunNotifier中看到了这一点:Java JUnit RunNotifier和fireTestRunFinished,java,ant,junit,jboss-arquillian,Java,Ant,Junit,Jboss Arquillian,我试图从Ant(1.8.2,支持junit4)执行一些Arquillian测试,但是Ant任务似乎没有调用RunNotifier.fireTestRunFinished(),Arquillian测试运行程序依赖于此从容器中取消部署Arquillian jmx war。 JUnit的Eclipse集成调用了未完成的方法,从那里一切都正常工作 我环顾junit javadoc,在RunNotifier中看到了这一点: public void fireTestRunFinished(Result re
public void fireTestRunFinished(Result result)
Do not invoke.
此外,javadoc类的描述说明如下:
该类的未来发展可能会将fireTestRunStarted(描述)和fireTestRunFinished(结果)移动到一个单独的类中,因为每次运行只能调用它们一次
但它没有具体说明它将被移动到哪里
环顾junit的源代码,我发现调用fireTestRunFinished的唯一地方是在这个方法中:
/**
* Do not use. Testing purposes only.
*/
public Result run(Runner runner) {
Result result= new Result();
RunListener listener= result.createListener();
fNotifier.addFirstListener(listener);
try {
fNotifier.fireTestRunStarted(runner.getDescription());
runner.run(fNotifier);
fNotifier.fireTestRunFinished(result);
} finally {
removeListener(listener);
}
return result;
}
正如你所看到的,它说…不要调用
我的问题是,JUnit计划在所有测试运行完毕后通知自定义运行程序做什么?如果不使用当前的API,还有其他可用的吗?
现在我的选项是修改Arquillian运行程序,使其不再依赖于RunListener,或者修改ant任务以调用RunNotifier.fireTestRunFinished。无论哪种方式,我都必须更改我不拥有的代码…这显然不是我的第一选择
…或者我可以扩展Arquillian runner,重写run()方法,并在super.run()之后执行RunListener所做的操作
有人有其他办法吗?你有没有办法解决这个问题?我有完全相同的问题。@Waxolunist我基本上扩展了Arquillian runner,并在super.run()之后进行了清理。看来是合理的。顺便说一句,我换成了黄瓜。