我有一种方法,试图调用内存中的图像转换器,如果失败,然后尝试在磁盘上执行图像转换。 (在内存中的图像转换器将尝试分配图像的第二个副本,因此,如果原来是非常大的,我们可能没有足够的内存吧。)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