我有一種方法,試圖調用內存中的圖像轉換器,如果失敗,然後嘗試在磁盤上執行圖像轉換。 (在內存中的圖像轉換器將嘗試分配圖像的第二個副本,因此,如果原來是非常大的,我們可能沒有足夠的內存吧。)JUnit可以模擬OutOfMemoryErrors嗎?
public BufferedImage convert(BufferedImage img, int type) {
try {
return memory_converter.convert(type);
}
catch (OutOfMemoryError e) {
// This is ok, we just don't have enough free heap for the conversion.
}
// Try converting on disk instead.
return file_converter.convert(img, type);
}
我想編寫單元測試運行每個代碼路徑的JUnit,但是運行JUnit時不夠方便,因此強制執行OutOfMemoryError
。有沒有辦法在JUnit中模擬OutOfMemoryError
?
我想到我可以製作一個假的子類BufferedImage
,它會在第一次調用內存轉換器調用的方法時拋出OutOfMemoryError
,但隨後在後續調用中表現正常。不過,這看起來像是黑客。
我看到檢查空閒堆的數量的問題是,發現它太少不能保證分配將失敗---嘗試分配可能會導致垃圾回收器釋放足夠的堆以使其成功。 – uckelman 2010-10-09 17:16:51