gpt4 book ai didi

java - JUnit 可以模拟 OutOfMemoryErrors 吗?

转载 作者:行者123 更新时间:2023-11-28 20:02:18 25 4
gpt4 key购买 nike

我有一个方法尝试调用内存中的图像转换器,如果失败,则尝试在磁盘上进行图像转换。 (内存图像转换器将尝试分配图像的第二个副本,因此如果原始图像非常大,我们可能没有足够的内存。)

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com