2013-11-04 63 views
1

我正在創建一個監視給定目錄以進行更改的守護進程。當它檢測到更改時,它將運行目錄中存在的所有使用JUnit的測試。 http://burtbeckwith.com/blog/?p=52JUnit測試殺死守護進程

它通過調用

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

與TestRunner的是從該代碼中的小適應這一點。

它正確地找到並運行所有測試,但是完成後,守護進程終止!我知道JUnit會殺死子線程,但爲什麼守護進程會死?我該如何解決它?

回答

1

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())); 
} 
+0

謝謝你,這是它。由於我與JUnit一起開發項目,因此我選擇將runMain的可見性作爲解決方案進行調整。 – Sven