使用参数匹配器 eq() 验证具有不同参数的方法调用失败抱怨参数不同
Verifying method call with different arguments using argument matchers eq() fails complaining Argument(s) are different
我正在编写一个测试用例来验证带有特定参数的特定方法调用的执行情况。仅当 将特定值传递给方法时,测试才需要通过 (例如,仅在传递状态和 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 具有以下定义
setData(final String arg1, final Object arg2) {...}
我知道 ArgumentCaptor,但我只是想让它像这样工作,因为我相信匹配器 eq()此处用于检查为 both 参数传递的值是否相等。还是因为它是对象而导致问题。
这样可以验证吗?谢谢
问题出在我的代码上,因为我的测试未使用 @Before 正确初始化。
我正在编写一个测试用例来验证带有特定参数的特定方法调用的执行情况。仅当 将特定值传递给方法时,测试才需要通过 (例如,仅在传递状态和 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 具有以下定义
setData(final String arg1, final Object arg2) {...}
我知道 ArgumentCaptor,但我只是想让它像这样工作,因为我相信匹配器 eq()此处用于检查为 both 参数传递的值是否相等。还是因为它是对象而导致问题。
这样可以验证吗?谢谢
问题出在我的代码上,因为我的测试未使用 @Before 正确初始化。