У моєму тестовому класі у мене є приватний метод, який конструює об'єкт, що часто використовується 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()
, без вигоди.