2012-11-02 38 views
2

當給定的JUnit4測試運行時,我希望它生成所有TestResults的日誌文件。我不想通過CI/ant/maven調用它。 我希望在任何時候都可以隨時調用JUnit測試。如果這是不可能的,那麼我想寫我自己的亞軍,它有問題地調用我的AllTestSuites類並記錄所有結果本身。如何將JUnit4的測試通過/失敗結果記錄到文件中?

這裏將是我的測試類:

public class SimpleTestSuite extends TestCase{ 

    @Test 
    public void simpleTestPass() { 
     assertTrue(true); 
    } 

    @Test 
    public void simpleTestFail() { 
     assertTrue(false); 
    } 

    @Test 
    public void simpleTestException() { 
     throw new RuntimeException(); 
    } 

} 

我把它在一個測試計劃,包含了所有我的測試套件來運行:

@RunWith(Suite.class) 
@Suite.SuiteClasses({SimpleTestSuite.class, ExampleSuite.class,}) 
public final class AllTestSuites {} 

我想要調用AllTestSuites和讓它生成一個如下所示的日誌文件。請記住,我更願意捕獲JUnit4框架結果總線上的內容,而不是重新創建/創建新的測試運行器。

simpleTestPass - pass - 1/1 assertions passed 
simpleTestFail - fail - 0/1 assertions passed 
simpleTestException - exception - stacktrace as follows... 

回答

5

添加記錄在你測試類和基礎測試類,並定義爲TestWatchMan如下:

Logger logger = LoggerFactory.getLogger(TestCase.class); 
@Rule public MethodRule watchman = new TestWatchman() { 
    public void starting(FrameworkMethod method) { 
     logger.info("Test {} is running.", method.getName()); 
    } 
    public void succeeded(FrameworkMethod method) { 
    logger.info("Test {} succesfully run.", method.getName()); 
    } 
    public void failed(Throwable e, FrameworkMethod method) { 
     logger.error("Test {} failed with {} reason.", 
               method.getName(), e.getMessage()); 
    } 
}; 
0

JUnit會輸出這些結果與標準的System.out。也許你可以將該輸出重定向到一個文件。

@BeforeClass 
void redirectOut(){ 
    System.setOut(new PrintStream(new OutputStream() { 
     @Override 
     public void write(int arg0) throws IOException { 
     // TODO Auto-generated method stub 

     } 
    })); 
} 
1

您可以使用JUnit TestWatcher

一個TestWatcher定義了以下方法:

  • 成功()
  • 失敗()
  • 開始()
  • 完成()

,你可以實現得到通知並將它們寫入文件。

相關問題