Junit 用Mockito调用mock方法而不是real方法
我有一个需要调用的方法,而不是真正的方法。 相反,我得到了一个例外。有人能帮我找到通过mockito调用替代方法的正确方法吗Junit 用Mockito调用mock方法而不是real方法,junit,mocking,mockito,Junit,Mocking,Mockito,我有一个需要调用的方法,而不是真正的方法。 相反,我得到了一个例外。有人能帮我找到通过mockito调用替代方法的正确方法吗 org.mockito.exceptions.misusing.InvalidUseOfMatchersException: Invalid use of argument matchers! 2 matchers expected, 4 recorded. This exception may occur if matchers are combined with r
org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
Invalid use of argument matchers!
2 matchers expected, 4 recorded.
This exception may occur if matchers are combined with raw values:
//incorrect:
someMethod(anyObject(), "raw String");
When using matchers, all arguments have to be provided by matchers.
For example:
//correct:
someMethod(anyObject(), eq("String by matcher"));
//Code starts here
class A{
public realMethod(String s, Foo f){
}
}
class B {
public mockMethod(String s, Foo f) {
}
}
class UnitTestClass{
ClassA mock = new ClassA();
mock.when(realMethod(any(String.class), any(Foo.class))).thenReturn(mockMethod(any(String.class),any(Foo.class));
}
你搞错了 在这里: 这根本没有什么意义 模拟的工作原理如下:
a mock=mock(a.class)
when(a.foo(x, y)).thenReturn(b.bar(x, y))
这就是你想要做的。但问题是:这并不是那么容易。您不能在when()
调用之前使用any()
匹配器然后返回部分来“提供”在when()
调用中传递的参数!很简单
模拟应在特定的单元测试中进行,以获得特定的结果
意思:你不是在写一个普通的程序,在这个程序中,将参数“转发”到另一个调用是有意义的。换言之;您的代码应该更像:
when(mock.realMethod("a", someSpecificFoo)).thenReturn(mockMethod("a", someSpecificFoo))
这是这里唯一可能的事情
除此之外,您可能还想研究Mockito
长话短说:看起来你根本不懂如何使用模拟框架。我建议您退后一步,阅读/学习各种教程。这不是你通过反复试验学到的东西 非常感谢。。感谢您的反馈。。我同意我不明白,这是我第一次插手这件事。没关系。你的回答“足够好”,可以给出合理的答案。如果你考虑支持/接受,明天就可以自由地去做,因为我今天已经达到每日的上限了。您还可以使用thenAnswer转发参数并动态设置返回。看看这个问题的答案。
when(mock.realMethod("a", someSpecificFoo)).thenReturn(mockMethod("a", someSpecificFoo))