我想在單元測試失敗時在問題跟蹤軟件中創建錯誤報告。這意味着當測試以字符串形式失敗時,我需要保存通常打印到IDE控制檯的內容。到目前爲止,我有以下代碼:如何將JUnit輸出分配給字符串?
@Rule
public ErrorCollector collector = new ErrorCollector();
...
@Test
public void testFailedUnitTest() {
collector.checkThat(3, equalTo(5));
}
它將以下內容輸出到控制檯。我想把這變成一個字符串,而不是/除了它輸出到我的IDE的控制檯:
java.lang.AssertionError:
Expected: <5>
but: was <3>
at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)
at org.junit.Assert.assertThat(Assert.java:865)
...
我曾嘗試:
與try/catch塊周圍和使用e。得到...但 它沒有捕獲java.lang.AssertionError。 catch塊中的代碼甚至沒有執行。我認爲這是因爲 我的收集器正在等待拋出異常後 testFailedUnitTest()完成拋出的錯誤,以便它可以 繼續執行失敗的測試。
圍繞一個正常的,非集合的JUnit測試與try/catch塊。
在我的tearDown()中抓取輸出後,所有測試都完成 。但沒有方法像public String [] getJUnitFailures()the ErrorCollector JavaDoc那麼 沒有工作。
在我的pom.xml中編輯某些東西的各種方法,如setting the redirectTestOutputToFile element to true,但它們與2)有相同的問題,不幸的是一些遺留代碼不使用Maven。但是,Maven特定的方法是可以接受的。
我與別人的人誰說我可能能夠使用the Logger class每個測試的輸出記錄到文件中,並作爲一個字符串讀取每個文件講話。他承認這是一種剽竊行爲,可能會干擾我們的其他日誌設施。
這是否會工作,如果是這樣,它是做到這一點的最佳方式?
預先感謝您。 :)
另外我使用JUnit 4.11,但我可以很容易地改變我的pom.xml的版本,如果該解決方案是特定版本。 – JaneGoodall
你的要求很奇怪。最好的選擇是將所有控制檯輸出重定向到日誌文件。你可以使用log4j,並且你應該能夠獲取從你的junit登錄的正確的日誌數據,因爲其他日誌也會在那裏。爲此,你應該在log4j.properties文件中用你可以搜索的字符串修改你的appender。 – vikeng21
這可能不起作用。您在這裏重新創建輪子 - 我建議您使用現有的生成文檔的測試框架,或許是Sonar? –