Mockito验证方法调用的参数

时间:2018-08-24 14:55:58

标签: java unit-testing junit mockito

在为带有多个传入参数的方法编写Mockito单元测试时,我想验证是否传入了确切的参数。 方法签名是(出于示例目的):

public void process(String stringParam, int numParam, CustomObject objectParam)

我知道这些参数必须在内部传递:

String stringParam = "line1 \n line2 \n line2 \n"
int numParam = 123;
AnotherCustomObject bank = new AnotherCustomObject(1, "Bank name")
CustomObject objectParam = new CustomObject(1, "Customer name", bank);

verify方法的外观如下:

verify(testObject, times(1)).process(eq(stringParam), eq(numParam), eq(objectParam));

但是结果是

Argument(s) are different! Wanted:
...all the details of failure...
Comparison Failure:  <Click to see difference>
...the rest of details...

当您单击单击以查看差异并希望看到原始问题时,您只会看到令人困惑的消息内容相同(至少在您看到的IntelliJ Idea中这条信息) enter image description here

1 个答案:

答案 0 :(得分:3)

在调查此案例时,我遇到了几篇文章,其中的根被认为是AnotherCustomObject或CustomObject的一个错误覆盖的equals()方法。

调查后,事实证明这不是问题。一切都变得平淡无奇:

传递给该方法的字符串中的

换行符具有默认的Windows编码( / r / n )。同时,为了在Mockito中进行验证,我使用了一个仅带/ n中断的字符串(这有点奇怪,因为我在调试方法时得到了该字符串)。

同时,Inteliji Idea在比较模式下显示两个字符串相等。

更新:但最好使用
System.getProperty(“ file.separator”)