При написании модульного теста 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 вы видите это сообщение)





Во время расследования этого случая я наткнулся на несколько сообщений, в которых его корень считался неправильно переопределенным методом equals () для AnotherCustomObject или CustomObject.
После расследования выяснилось, что это не проблема. Все было гораздо прозаичнее:
разрывы строк, которые присутствовали в строке, переданной методу, имели кодировку Windows по умолчанию (/ r / n). Между тем, для вирификации в Mockito я использовал строку только с разрывом / n (это немного странно, так как я получил эту строку при отладке метода).
При этом Inteliji Idea показала обе строки в режиме сравнения как равные.
Обновлять: а лучше
System.getProperty ("file.separator")