2015-04-07 28 views
10

我試圖在我的單元測試(@Test mehotds)中用System.out打印一些數據,但它沒有顯示任何東西。但是,它在@Before方法中正常工作。我使用JUnit和Maven Surefire插件。System.out.print()在測試方法中不顯示任何東西

public class MyTests { 

    @Before 
    void init(){ 

    System.out.println("Initializing some data..."); // <- It works. 

    } 

    @Test 
    void shouldRemoveSeries() { 

    System.out.println("TEST: Should remove series"); // <- It doesn't. 

    } 
} 

maven-surefire-plugin配置:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.15</version> 
    <configuration> 
    <includes> 
     <include>**/*Tests.java</include> 
    </includes> 
    </configuration> 
</plugin> 

感謝。

+1

只是爲了澄清:你爲什麼使用System.out.println()而不是Logger?後者是專爲你寫的目的而設計的 – novy1234

+0

你有沒有嘗試過一個測試名稱,開始於:test? 有一些JUnit版本需要這個。 – Stultuske

+0

以Junit測試或Maven測試運行 – Selva

回答

1

使用Log

private static Logger log = Logger.getLogger(LoggingObject.class); 
log.info("I'm starting"); 

System.setOut()

private final PrintStream stdout = System.out; 
private final ByteArrayOutputStream output = new ByteArrayOutputStream(); 
private TerminalView terminalview; 
+0

我已經使用記錄器,但它仍然沒有顯示任何東西。測試沒有通過,我的意思是,他們運行有錯誤,也許這是記錄不起作用的原因? –

+0

任何你遇到的測試,理論上都會被評估候選人,所以也許測試會把日誌作爲測試的一部分,那就是爲什麼a)控制檯b)測試沒有結果通過...檢查System.setOut( )'鏈接,我可以創建一個函數來打印你想要的東西而不會弄亂測試...;) –

+0

它不適用於我:(而'Logger'在@Before方法中不起作用,與此同時System.out.print()沒有。 –

2

的問題是你的測試類的名稱。要在構建內部測試階段(由Maven的萬無一失插件)承認,它必須被命名爲「*測試」:

Inclusions and Exclusions of Tests

+0

我編輯了這個問題。Maven正在識別這些測試。 –

0

這熟悉的聲音給我,所以我假設你正在運行的來自某些IDE(Netbeans?)的測試。可能是這種情況,它只顯示失敗的測試輸出。從控制檯運行測試時是否也會出現這種情況?

使用System.err代替System.out可能會帶來更多運氣,但我不確定這一點。

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.18.1</version> 
    <configuration> 
    <redirectTestOutputToFile>true</redirectTestOutputToFile> 
    </configuration> 
</plugin> 

6

要通過的System.out.println你需要配置Maven的萬無一失 - 插件將此輸出重定向到一個文件可以通過使用可實現以下讓你筆試的輸出該選件redirectTestOutputToFile會的System.out.println等的輸出重定向到被單獨創建一個文件:將其設置爲「真」 T

摘自文檔o將單元測試標準輸出重定向到文件 (位於reportsDirectory/testName-output.txt中)。

除此之外,System.out.println在一般的單元測試中沒有意義。

21

也一樣。我使用gradle這個來管理我的任務,我把這個在年底通過build.gradle文件:

test { 
    testLogging.showStandardStreams = true 
} 

現在我看到System.out.println(whateves)

+2

謝謝這救了我:) – Sky

+0

我遇到了同樣的問題,這也適用於我。 –