Tengo un método privado en mi clase de prueba que construye un Bar
objeto de uso común . El Bar
constructor llama al someMethod()
método en mi objeto burlado:
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 que quiero verificar 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 burlado se había someMethod
invocado dos veces. No quiero que mis métodos de prueba se preocupen por los efectos secundarios de mi getBar()
método, ¿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?
}
Pregunto, porque la documentación sugiere que restablecer objetos simulados es generalmente indicativo de malas pruebas. Sin embargo, esto me parece bien.
Alternativa
La opción alternativa parece estar llamando:
verify(mockedObject, times(2)).someMethod();
lo que en mi opinión obliga a cada prueba a conocer las expectativas de getBar()
, sin ningún beneficio.