Может ли 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. Это сделает ваш пример кода таким, как вы хотите.