Per correggere un bug in un'applicazione, ho modificato un metodo denominato postLogin
aggiungendo una chiamata a un metodo esistente denominato getShoppingCart
.
Codice
protected void postLogin() {
getShoppingCart();
}
Tuttavia, non sono sicuro di quale sia il modo migliore per scrivere un test unitario postLogin
.
Approccio 1
Usa verifica da Mockito per verificare semplicemente che il metodo è stato chiamato.
verify(mock).getShoppingCart();
Approccio 2
Prova l'effetto collaterale della chiamata del metodo recuperando il valore del carrello dell'utente.
AssertNotNull(user.getShoppingCart());
Un approccio è migliore dell'altro?
getShoppingCart()
metodo non abbia effetti collaterali, non è necessario verificare che venga chiamato. Se ha effetti collaterali, dovresti davvero cambiarne il nome perché i getXXX()
metodi convenzionalmente dovrebbero essere idempotenti.
getNextValue
? Probabilmente qualcuno potrebbe dire "Non chiamarlo getter; cambia il nome in nextValue
", ma l'ho già visto getNext
usato prima. Forse un esempio migliore sarebbe un oggetto che rappresenta un elettrone; cosa succede quando chiamo getPosition
? O peggio,getPosition(); getVelocity();