2

我正在创建一个监视给定目录以进行更改的守护程序。当它检测到更改时,它会使用目录中存在的 JUnit 运行所有测试。

它通过调用

    private void runTestsInWatchedDirectory(){
    TestRunner runner;
    runner= new TestRunner(this.dir);
    org.junit.runner.JUnitCore.main(runner.getClass().getName());
}

TestRunner 是对这段代码的一个小改编:http ://burtbeckwith.com/blog/?p=52 。

它正确地找到并运行所有测试,但是当它完成时,守护程序被终止!我知道 JUnit 会杀死子线程,但为什么守护进程会死掉?我该如何解决?

4

1 回答 1

2

JUnitCore.java中,您可以看到JUnitCore#main调用System.exit()

public static void main(String... args) {
    Result result = new JUnitCore().runMain(new RealSystem(), args);
    System.exit(result.wasSuccessful() ? 0 : 1);
}

使用类中的其他方法之一,或从 runMain 复制代码:

Result runMain(JUnitSystem system, String... args) {
    system.out().println("JUnit version " + Version.id());

    JUnitCommandLineParseResult jUnitCommandLineParseResult = JUnitCommandLineParseResult.parse(args);

    RunListener listener = new TextListener(system);
    addListener(listener);

    return run(jUnitCommandLineParseResult.createRequest(defaultComputer()));
}
于 2013-11-04T09:49:54.930 回答