![](/img/trans.png)
[英]How to show maven-surefire-plugin unit test coverage report on console
[英]How to read console output in maven surefire unit test
我正在嘗試測試一種必須將特定字符串打印到 System.out 的方法。
我已經使用這個答案來讓它與 JUnit 一起工作。
這在 JUnit 中運行良好,但測試隨后由 Maven surefire 在 CI 環境中運行。 然后測試失敗,據說是因為 Maven 捕獲了 System.out 並且它不可用於測試?
有人可以幫我找到一種在此 Surefire 測試中使用控制台輸出的方法嗎?
這是我的測試:
private final ByteArrayOutputStream outContent = new ByteArrayOutputStream();
private final ByteArrayOutputStream errContent = new ByteArrayOutputStream();
private final PrintStream originalOut = System.out;
private final PrintStream originalErr = System.err;
@Before
public void setUpStreams() {
System.setOut(new PrintStream(outContent));
System.setErr(new PrintStream(errContent));
}
@After
public void restoreStreams() {
System.setOut(originalOut);
System.setErr(originalErr);
}
@Test
public void testUpdateData() throws Exception {
MyData data = new MyData();
DataUtil.updateData(data);
Assert.assertTrue(outContent.toString().contains("is updating data within last 24h")); // assert that warning issued
}
測試類:
public final class DataUtil {
public static void updateData(Data d) {
/// do stuff
if (/*condition*/) {
System.out.println("data " + d.id + "is updating data within last 24h");
}
}
}
Maven 測試的輸出:
testUpdateData Time elapsed: 0.035 sec <<< FAILURE!
java.lang.AssertionError: null
at org.junit.Assert.fail(Assert.java:86)
at org.junit.Assert.assertTrue(Assert.java:41)
at org.junit.Assert.assertTrue(Assert.java:52)
我通過將System.out.println()
更改為使用 log4j 進行日志記錄來解決此問題。
根據Raedwalds 評論和 link7,我決定丟棄舊的系統輸出。 但是我沒有使用 PrintStreams,而是更進一步,重構了代碼以使用 Log4j 日志記錄。
然后我使用這個答案從單元測試中讀取輸出的日志。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.