Я создал простой тестовый класс с двумя полями, такими как
@Mock
private MyTestClass myTestClass;
@Spy
private final MyContext context = CommonTestData.getDefaultContext();
По сути, мне здесь не нужна шпионская функциональность, она просто используется для автоматической инъекции объекта в другие насмешки.
Для теста я попытался настроить myTestClass
так:
when(myTestClass.someMethod(eq(context))).thenReturn(someValue);
Проблема в том, что Matchers.eq
означает , а не , что соответствует «не расширенным» версиям MyContext
. Поэтому, когда someMethod
вызывается во время теста с "обычным" экземпляром MyContext
, который на самом деле equals
является значением, используемым для context
, метод-заглушка не вызывается.
Кажется, что расширенный класс MyContext
в Mockito реализует собственный метод equals, по крайней мере метод equals из MyContext
никогда не вызывается. Таким образом, в настоящее время я не могу придумать, каким образом можно изменить реальное сравнение.
Я могу подумать о различных обходных путях для этой проблемы, таких как использование настраиваемого сопоставления аргументов или создание метода с экземпляром «реального» объекта. Мне, однако, было интересно: есть ли какое-нибудь решение от Mockito для проверки равенства расширенных классов с их обычными аналогами?