У меня есть закрытый метод в моем тестовом классе, который создает часто используемый Bar
объект. Bar
Конструктор вызывает someMethod()
метод в моем издевались объекта:
private @Mock Foo mockedObject; // My mocked object
...
private Bar getBar() {
Bar result = new Bar(mockedObject); // this calls mockedObject.someMethod()
}
В некоторых моих тестовых методах, которые я хочу проверить, someMethod
также вызывался именно этим тестом. Что-то вроде следующего:
@Test
public void someTest() {
Bar bar = getBar();
// do some things
verify(mockedObject).someMethod(); // <--- will fail
}
Это терпит неудачу, потому что высмеянный объект someMethod
вызвал дважды. Я не хочу, чтобы мои тестовые методы заботились о побочных эффектах моего getBar()
метода, поэтому было бы разумно сбросить мой фиктивный объект в конце getBar()
?
private Bar getBar() {
Bar result = new Bar(mockedObject); // this calls mockedObject.someMethod()
reset(mockedObject); // <-- is this OK?
}
Я спрашиваю, потому что документация предлагает сброс фиктивных объектов, как правило, свидетельствует о плохих тестах. Тем не менее, это чувствует себя хорошо для меня.
альтернатива
Альтернативный выбор, кажется, вызывает:
verify(mockedObject, times(2)).someMethod();
что, на мой взгляд, заставляет каждый тест знать об ожиданиях getBar()
, без выгоды.