Java:我可以在运行时将运行时异常注入任意 class 方法吗?

Java: Can I Inject a runtime exception into an arbitrary class method at runtime?

出于测试目的,有时我想从代码的各个部分了解我的代码如何处理抛出的意外运行时异常。

例如,假设我有这样的方法:

public int getSum(int x, int y)
{
   return x + y;
}

有没有办法通过抛出异常而不是返回有效结果来使此方法在调用时失败?我知道我可以添加显式代码来执行此操作,但我想知道是否可以用一个只抛出的新方法替换 any class 中的方法运行时的异常,或类似的东西 ;-) 有点像 how Mockito can do the following:

doThrow(new Exception()).when(mockedObject).methodReturningVoid(...);

我更喜欢任何不需要任何额外工具的解决方案——只需要标准的 JVM。谢谢!

为了简单的目的,您可以尝试使用 Invocation Handler :包装 class 方法调用并在需要时抛出异常。

对于更复杂的操作,您可以使用 Java Instrumentation API