[英]Mockito verify still fails on using all Matchers
我最近正在写一个 JUnit 测试,我承认 Mockito 要么需要所有原始值,要么使用所有匹配器,但我发现以下情况对于所有匹配器仍然失败,错误消息是:
参数匹配器的使用无效,预计 0 个匹配器:记录 1 个:
我进行了一些测试,它看起来与使用存根方法作为 eq() 匹配器的值有关。 请参见下面的示例:
我有一个 Class 一个很简单
public class A {
public void testMockitoMatcher(double a, String b){
}
}
这是我的测试用例
import org.junit.Test;
import static org.mockito.Mockito.*;
public class SomeUnitTest {
private A mockA = mock(A.class);
@Test
public void allMatchersDoesntWork() {
Object mockObject = mock(Object.class);
String someString = "Just some mocked String value to return";
when(mockObject.toString()).thenReturn(someString);
mockA.testMockitoMatcher(1312d, mockObject.toString());
verify(mockA, times(1)).testMockitoMatcher(anyDouble(), eq(someString)); //<- This works
verify(mockA, times(1)).testMockitoMatcher(anyDouble(), eq(mockObject.toString())); //<- This doesn't by using stub method toString() to return the String value as param to eq()
}
}
我还通过在第二个验证语句中使用调试来验证 mockObject.toString() 仍然可以为我返回存根值。 两个验证都使用所有匹配器,为什么 mockito 在第二次验证时仍然只给我记录了 1 个匹配器而不是 2 个匹配器?
谢谢!
Mockito 希望您的测试分三个阶段进行。
您需要按此顺序执行这三件事,因为 Mockito 会跟踪您是在进行存根、验证还是其他操作。 它还有自己的内部堆栈,用于存储匹配器,用于存根或验证。
在您的示例中的第二个verify
调用中,对anyDouble()
的调用将Matcher
放入堆栈。 但这会为调用mockObject.toString()
创建一个无效的 state 。
不要这样做。 一旦准备好运行断言和验证,就不应再调用存根方法。 将每个测试的“安排”、“行动”和“断言”阶段彼此完全分开。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.