gpt4 book ai didi

java - InvalidUseOfMatchersException 在使用 mockito 强制在正在接受 junit 测试的 Copy() 方法中出现 CloneNotSupportedException 时

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:44:16 25 4
gpt4 key购买 nike

我正在尝试使用 mockito 访问受 try catch 保护的复制方法的一部分,同时尝试在我的 junit 测试中获得 100% 的覆盖率。包含我要访问的方法的类实现了可克隆,因此很难抛出 ClassNotFoundExceptions。

我尝试通过 mockito 在调用方法时抛出异常的能力以几种不同的方式强制执行此异常,但总是想出 InvalidUseOfMatchersException。

以下分别是我需要访问的代码和我为达到它所做的最佳尝试

catch(ClassNotFoundException cnfe) {
cnfe.printStackTrace();
}
MyClass dict = mock(MyClass.class);
Object obj1 = new Object();

when(MyClass.copy(anyObject())).thenThrow(ClassNotFoundException.class);
dict.copy(obj1);

我希望到达 cnfe.printStackTrace() 行但无法到达。

最佳答案

你似乎在 mock 一个静态方法,它实际上是 impossible .根据@Matthias 的说法,它需要在运行时修改类的字节码

您必须始终调用when使用实例方法调用,因为:

  1. 这保证了该方法将在 mock 上调用,不会在原始类(即 MyClass)上调用。
  2. 这可以防止编译时错误,因为无法从静态上下文中引用此类非静态方法。

这里是完整的 Java 代码:

try {
MyClass dict = mock(MyClass.class);
Object obj1 = new Object();

when(dict.copy(anyObject())).thenThrow(ClassNotFoundException.class);
dict.copy(obj1);
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
}

这应该输出:

Exception in thread "main" java.lang.ClassNotFoundException

关于java - InvalidUseOfMatchersException 在使用 mockito 强制在正在接受 junit 测试的 Copy() 方法中出现 CloneNotSupportedException 时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56650623/

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