我使用Mockito进行单元测试,我使用ArgumentMatcher来检查参数的特定字段是否具有特定值.
我有一个StatusMatcher类,它扩展了ArgumentMatcher并检查类MyClass的对象在状态字段中是否具有特定值.我在测试中调用它的方式是:
verify(myDAO, times(1)).update(argThat(new StatusMatcher("SomeStatus")));
Run Code Online (Sandbox Code Playgroud)
这update是使用一些MyClass对象调用的DAO方法.我想看看它是否具有正确的状态.这就是我得到的:
Argument(s) are different! Wanted:
myDAO.update(
<Status matcher>
);
-> at com.foo.bar.MyTest.test1
Actual invocation has different arguments:
myDAO.update(
com.foo.bar.MyClass
);
Run Code Online (Sandbox Code Playgroud)
请注意,除了一个测试用例之外,这适用于所有测试用例.所以我知道StatusMatcher等已经正确编码.我不确定它获得此异常的方法有什么不同.
我想知道的是:在什么条件下,ArgumentMatcher会抛出这样的异常,这样我就可以找到我所缺少的东西(这不是我粘贴实际的方法代码)请告诉我,如果解释不够清楚,并且我会尽力改进它.感谢阅读这篇远:)
编辑:这是我的StatusMatcher类的代码
private class StatusMatcher extends ArgumentMatcher<MyClass> {
private String status;
public StatusMatcher(String hs) {
status = hs;
}
@Override
public boolean matches(Object argument) {
return status.equals(((MyClass)argument).getStatus());
}
}
Run Code Online (Sandbox Code Playgroud)