使用参数匹配器eq()验证具有不同参数的方法调用失败,抱怨参数不同

时间:2018-08-29 11:07:57

标签: mockito junit4 verify

我正在编写一个测试用例,以验证具有特定参数的特定方法调用的执行。仅当通过特定值(例如,仅当状态和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() 两个参数传递的值。还是因为它是对象而引起问题。

是否可以这样验证?谢谢。

1 个答案:

答案 0 :(得分:0)

问题出在我的代码上,因为我的测试未使用@Before正确初始化。