Tengo un método privado en mi clase de prueba que construye un objeto Bar
comúnmente usado. El constructor Bar
llama al método someMethod()
en mi objeto simulado:
private @Mock Foo mockedObject; // My mocked object
...
private Bar getBar() {
Bar result = new Bar(mockedObject); // this calls mockedObject.someMethod()
}
En algunos de mis métodos de prueba, quiero comprobar que someMethod
también fue invocado por esa prueba en particular. Algo como lo siguiente:
@Test
public void someTest() {
Bar bar = getBar();
// do some things
verify(mockedObject).someMethod(); // <--- will fail
}
Esto falla, porque el objeto simulado tuvo someMethod
invocado dos veces. No quiero que mis métodos de prueba se preocupen por los efectos secundarios de mi método getBar()
, ¿sería razonable restablecer mi objeto simulado al final de getBar()
?
private Bar getBar() {
Bar result = new Bar(mockedObject); // this calls mockedObject.someMethod()
reset(mockedObject); // <-- is this OK?
}
Lo pregunto, porque la documentación sugiere que restablecer objetos simulados es generalmente indicativo de malas pruebas. Sin embargo, esto se siente bien para mí.
Alternativa
La opción alternativa parece estar llamando:
verify(mockedObject, times(2)).someMethod();
que en mi opinión obliga a cada prueba a conocer las expectativas de getBar()
, sin ganancia.