Eu tenho um método privado na minha classe de teste que constrói um Bar
objeto comumente usado . O Bar
construtor chama o someMethod()
método no meu objeto zombado:
private @Mock Foo mockedObject; // My mocked object
...
private Bar getBar() {
Bar result = new Bar(mockedObject); // this calls mockedObject.someMethod()
}
Em alguns dos meus métodos de teste, eu quero verificar someMethod
também foi invocado por esse teste específico. Algo como o seguinte:
@Test
public void someTest() {
Bar bar = getBar();
// do some things
verify(mockedObject).someMethod(); // <--- will fail
}
Isso falha, porque o objeto simulado foi someMethod
chamado duas vezes. Eu não quero que meus métodos de teste se preocupem com os efeitos colaterais do meu getBar()
método, então seria razoável redefinir meu objeto simulado no final de getBar()
?
private Bar getBar() {
Bar result = new Bar(mockedObject); // this calls mockedObject.someMethod()
reset(mockedObject); // <-- is this OK?
}
Eu pergunto, porque a documentação sugere a redefinição de objetos simulados geralmente é indicativa de testes ruins. No entanto, isso parece bom para mim.
Alternativa
A escolha alternativa parece estar chamando:
verify(mockedObject, times(2)).someMethod();
o que, na minha opinião, força cada teste a conhecer as expectativas de getBar()
, sem nenhum ganho.