在为带有多个传入参数的方法编写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中这条信息)
答案 0 :(得分:3)
在调查此案例时,我遇到了几篇文章,其中的根被认为是AnotherCustomObject或CustomObject的一个错误覆盖的equals()方法。
调查后,事实证明这不是问题。一切都变得平淡无奇:
传递给该方法的字符串中的换行符具有默认的Windows编码( / r / n )。同时,为了在Mockito中进行验证,我使用了一个仅带/ n中断的字符串(这有点奇怪,因为我在调试方法时得到了该字符串)。
同时,Inteliji Idea在比较模式下显示两个字符串相等。
更新:但最好使用
System.getProperty(“ file.separator”)