gpt4 book ai didi

java - 从某些方法调用模拟时出现奇怪的模拟 InvalidUseOfMatchersException

转载 作者:太空宇宙 更新时间:2023-11-04 07:51:15 25 4
gpt4 key购买 nike

import org.mockito.Mockito;

public class Scratch2 {
public static class Foo {
}

public interface Custom {
public void someMethod(String arg1, String arg2, String arg3,
String arg4);
}

public static class SomeClass {

private final Custom custom;

public SomeClass(Custom c) {
this.custom = c;
}

public boolean run(Foo someFoo) {
custom.someMethod("Dummy", "Dummy", "Dummy", "Dummy");
return false;
}
}

public static void callSomeMethod(Custom custom) {
custom.someMethod("Dummy", "Dummy", "Dummy", "Dummy");
}

public static void main(String[] args) {
Custom mock = Mockito.mock(Custom.class);
SomeClass c = new SomeClass(mock);
callSomeMethod(Mockito.mock(Custom.class));
c.run(Mockito.any(Foo.class));

}
}

如果我们模拟自定义接口(interface)并直接调用 someMethod 就没有问题。但是使用 run() 会出现以下错误:

==========

线程“main”中出现异常org.mockito.exceptions.misusing.InvalidUseOfMatchersException:参数使用无效匹配者!预计有 4 个匹配者,已记录 1 个: -> atcom.knewton.scratch.Scratch2.main(Scratch2.java:37)

如果匹配器与原始值组合,则可能会发生此异常://不正确:someMethod(anyObject(), "原始字符串");使用匹配器时,所有参数都必须是由匹配者提供。例如://正确:someMethod(anyObject(),eq("匹配器字符串"));

有关详细信息,请参阅 Matchers 类的 javadoc。

位于 com.knewton.scratch.Scratch2$SomeClass.run(Scratch2.java:24) 处com.knewton.scratch.Scratch2.main(Scratch2.java:37)

==========

这是在mockito 1.9.5上

最佳答案

在这种情况下您对匹配器的使用是不正确的。发生的情况是,mockito 将记录此匹配器,以便在将来调用模拟方法时使用,在您的情况下发生在这里:

public boolean run(Foo someFoo) {
custom.someMethod("Dummy", "Dummy", "Dummy", "Dummy"); // <- call on mock
return false;
}

mockito 会计算您对该方法使用 Mockito.any(Foo.class) 的情况,现在正确地提示您只提供了一个匹配器,但事实上,由于该方法需要 4 个参数,因此您需要传递 4 个匹配器。

不应将匹配器传递给您的 run() 方法,您应该传递一个真实的实例(就像您在自己的答案中所做的那样),或者如果该对象很难实例化并且您无论如何都不需要它,则可以将其替换为模拟:

public static void main(String[] args) {
Custom mock = Mockito.mock(Custom.class);
SomeClass c = new SomeClass(mock);
c.run(Mockito.mock(Foo.class));
}

关于java - 从某些方法调用模拟时出现奇怪的模拟 InvalidUseOfMatchersException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14434402/

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