我正在编写一个测试用例,以使用具有特定参数的特定方法调用来验证执行。测试仅在将特定值传递给方法时才需要通过(例如,仅在传递状态和 ParseError 时传递(。下面是测试要验证的代码片段:
Mockito.verify(exeImpl, Mockito.atLeastOnce()).setData(eq("status"), eq("ParseError"));
并且案例失败,如下所示:
Argument(s) are different! Wanted:
exeImpl.setData(
"status",
"ParseError"
);
-> at com.TestTask.testRest(TestTask.java:280)
Actual invocation has different arguments:
exeImpl.setData(
"status",
"Error"
);
-> at
com.TestTask.setDefault(Task.java:186)
错误中提到的实际调用是因为在启动业务逻辑之前使用默认值调用 setData。业务逻辑完成后,再次调用 setData 来设置结果。
并且设置数据具有以下定义
setData(final String arg1, final Object arg2) {...}
我知道 ArgumentCaptor,但我只是想让它像这样工作,因为我相信这里使用匹配器eq((来检查为两个参数传递的值的相等。还是因为它是对象而引起问题。
可以这样验证吗?谢谢。
问题出在我的代码上,因为我的测试没有用@Before正确初始化。