2008-09-19 67 views
5

我在我的應用程序上運行一些JUnit測試。每個測試都有一個for循環調用各自的方法10000次。 測試方法產生大量的日誌。這些日誌也由JUnit作爲測試輸出自動收集。 這種情況會導致OutOfMemoryError,因爲JUnit保留輸出的字符串緩衝區變得太大。 在測試過程中,我不需要這些日誌,所以如果有辦法告訴JUnit「不要保留程序輸出」,那就足夠了。 有什麼建議嗎?Junit輸出和OutOfMemoryError

回答

3

?有什麼方法可以覆蓋默認的日誌記錄行爲以忽略所有日誌消息?

1

一些選項:

    ,使其轉儲文件而不是標準輸出
  1. 更改您的日誌記錄。
  2. -Xmx <some number>M增加最大堆大小,如-Xmx 256M
  3. 您正在使用什麼類型的日誌記錄
0

我只是增加可用內存。嘗試添加-Xmx256m -Xmx256m到您的虛擬機。

0

該解決方案正在重寫日誌記錄屬性。現在我禁用了日誌記錄,並且似乎都工作了(測試仍在運行)。如果它有效,我將配置一種記錄到文件的方式。 謝謝大家(並祝賀Jeff爲本網站的朋友&)。

0

我看到一個答案已被接受,但這裏是如果我得到它打完了和測試,我會提交更快:

如果「記錄」你的意思的System.out.println()或者System.err.println(),如果你確定你的測試真的不需要日誌,那麼你可以通過編程方式重定向stdout和stderr。

// Save the original stdout and stderr 
PrintStream psOut = System.out; 
PrintStream psErr = System.err; 
PrintStream psDevNull = null; 
try 
{ 
    // Send stdout and stderr to /dev/null 
    psDevNull = new PrintStream(new ByteArrayOutputStream()); 
    System.setOut(psDevNull); 
    System.setErr(psDevNull); 
    // run tests in loop 
    for (...) 
    { 
    } 
} 
finally 
{ 
    // Restore stdout and stderr 
    System.setOut(psOut); 
    System.setErr(psErr); 
    if (psDevNull != null) 
    { 
     psDevNull.close(); 
     psDevNull = null; 
    } 
} 

這樣,你的測試輸出將被禁用,但如果你像這樣使用命令行上的重定向從JUnit的其他輸出不會,因爲這將是:

ant test &> /dev/null 

的命令行重定向會導致所有Ant/JUnit的輸出被重定向,而不僅僅是來自正在測試的類的內容,所以這可能不是您想要的。編程重定向只會導致您的程序中的System.out和System.err的打印/寫入被重定向,並且您仍然會從Ant和JUnit獲得輸出。

0

如果它的任何幫助,設置outputtoformatters =「不」解決了我所有的記憶問題(在螞蟻1.7.1它這可以防止通過試驗生成的輸出被髮送到測試格式化)。