В тестах для проверки объектов данных, не имеющих методов hashcode/equals, AssertJ имеет очень хороший API:
Assertions.assertThat(result)
.usingRecursiveComparison()
.ignoringFields("id")
.isEqualTo(expected)
Для проверки вызова методов я всегда использовал Mockito:
Mockito.verify(mock, times(2)).method(eq(arg1), eq(arg2));
Ситуация, в которой я сейчас нахожусь, я хочу объединить эти подходы и использовать verify
, но сравните аргументы, используя AssertJ usingRecursiveComparison
, что-то вроде этого:
Mockito.verify(mock, times(2)).method(usingRecursiveComparison(arg1));
Есть ли способ добиться этого с помощью Mockito + AssertJ или другой библиотеки, предоставляющей этот тип API?
В зависимости от вашего варианта использования ArgumentMatchers.refEq может помочь:
verify(mock, times(2)).method(refEq(arg1, "id"));
или вы можете использовать AssertJ через ArgumentMatchers.assertArg
verify(mock, times(2)).method(assertArg(arg -> {
assertThat(arg)
.usingRecursiveComparison()
.ignoringFields("id")
.isEqualTo(arg1)
}));
Да! Из комментариев
assertArg
: Обычно используется с Mockito.verify(Object) для выполнения утверждений по параметрам, передаваемым при вызове проверенного метода.