我有一个方法尝试调用内存中的图像转换器,如果失败,则尝试在磁盘上进行图像转换。 (内存图像转换器将尝试分配图像的第二个副本,因此如果原始图像非常大,我们可能没有足够的内存。)
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
,但随后在后续调用中表现正常。不过,这似乎是一种 hack。
最佳答案
您应该模拟您的转换器,而不是使用真实的转换器。
一旦你这样做了,你只需让你的模拟库在 convert()
方法被调用时抛出一个新的 OOME。
例如,对于 JMock,您可以这样做:
allowing(mockConverter).convert(with(any(int.class)));
will(throwException(new OutOfMemoryError()));
关于java - JUnit 可以模拟 OutOfMemoryErrors 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3894328/