java - JUnit 可以模拟 OutOfMemoryErrors 吗?

标签 java unit-testing testing junit out-of-memory

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

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/

相关文章:

java - Lagom 中每个服务有两个或更多 ReadSideProcessor

java - java 中的 .isEqualTo 与 .equals

testing - 如何使用 phpunit 检查 TeSTLoader 是否工作?

mongodb - 错误 : Cannot find specified path for mongodb/data/db/testReplSet-0 when replicaSet.

java - 线程(在类中)和 Activity 之间的 Android 消息传递

java - 具有条件状态更改的状态模式

java - 从 Android 中的 "values"文件夹获取字符串资源

unit-testing - 实现 protected 无参数构造函数以进行单元测试

javascript - beforeEach 具有用于 Mocha 测试的套件语法

testing - Geb:为每个测试打开新标签