Может ли Mockito отключить метод без учета аргумента?
Я пытаюсь протестировать некоторые устаревшие коды, используя Mockito.
Я хочу заглушить a FooDao
, который используется в производстве следующим образом:
foo = fooDao.getBar(new Bazoo());
Я могу написать:
when(fooDao.getBar(new Bazoo())).thenReturn(myFoo);
Но очевидная проблема заключается в том, что getBar()
никогда не вызывается с тем же объектом Bazoo
, что я зачищал метод for. (Проклятие, что оператор new
!)
Мне бы это понравилось, если бы я мог заглушить метод таким образом, чтобы он возвращал myFoo
независимо от аргумента. В противном случае я прислушаюсь к другим обходным предложениям, но мне бы очень хотелось избежать изменения производственного кода до тех пор, пока не будет разумного охвата тестирования.
Ответы
Ответ 1
when(
fooDao.getBar(
any(Bazoo.class)
)
).thenReturn(myFoo);
или (чтобы избежать null
s):
when(
fooDao.getBar(
(Bazoo)notNull()
)
).thenReturn(myFoo);
Не забудьте импортировать сокеты (доступно еще много других):
import static org.mockito.Matchers.*;
Ответ 2
Используйте это:
when(
fooDao.getBar(
Matchers.<Bazoo>any()
)
).thenReturn(myFoo);
Прежде чем вам нужно импортировать Mockito.Matchers
Ответ 3
http://site.mockito.org/mockito/docs/1.10.19/org/mockito/Matchers.html
anyObject должен соответствовать вашим потребностям.
Кроме того, вы всегда можете рассмотреть возможность внедрения hashCode и equals для класса Bazoo. Это сделает ваш пример кода таким, как вы хотите.