4

我正在尝试从 Ant(1.8.2,支持 junit4)执行一些 Arquillian 测试,但似乎 Ant 任务没有调用 RunNotifier.fireTestRunFinished() 并且 Arquillian 测试运行器依靠此来取消部署 arquillian-jmx 战争从容器中。JUnit 的 Eclipse 集成调用 fireRestRunFinished 方法,一切都从那里正常工作。

我环顾了junit javadoc并在RunNotifier中看到了这个:

public void fireTestRunFinished(Result result)
Do not invoke.

此外,类 javadoc 描述是这样说的:

此类的未来发展可能会将 fireTestRunStarted(Description) 和 fireTestRunFinished(Result) 移至单独的类,因为它们每次运行只能调用一次。

但它没有指定它将被移动到哪里。

查看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,是否还有其他可用的 API?现在我的选择是修改 Arquillian runner 以不再依赖 RunListener 或调用 RunNotifier.fireTestRunFinished 的 ant 任务。无论哪种方式,我都必须更改我不拥有的代码……这显然不是我的第一选择。

...或者我可以扩展 Arquillian 运行器,覆盖 run() 方法并执行 RunListener 在 super.run() 之后执行的操作。

有没有人看到任何其他方式解决这个问题?

4

0 回答 0