Ho l'impressione che il test di interazione (verificando le invocazioni fittizie) in generale dovrebbe essere evitato.
Quando invece dovrebbe essere asserito il metodo di prova unitario.
Tuttavia ci sono casi in cui il test di interazione non può essere evitato. In questi rari casi, ritengo che il test di interazione sia consentito.
Casi in cui il test di interazione è ok (ma continua a farlo in modo consapevole)
-
L'interazione
- facilita il cambiamento di stato (cambio di stato attraverso un servizio)
- l'interazione è side-effectful (accesso al database, chiamata di rete attraverso un servizio, invocazione a un osservatore)
Tuttavia sembra esserci un sacco di argomenti per l'interazione per . In particolare, per assicurarti che:
- le invocazioni si verificano (anche per le interazioni effetive non laterali)
- non si verificano invocazioni extra
Penso che questi casi rientrino nella categoria dei dettagli di implementazione e non dovrebbero essere più testati. Mentre questi casi hanno un punto, i test per la maggior parte degli scenari di implementazione avranno queste carenze. E penso che ci dovrebbe essere un certo livello di fiducia che nessuno sviluppatore nel team scriverà codice che dice ad esempio: aggiorna un'entità e la salva nel database su un metodo di query (chiara violazione di LSP , CQS e principio di minimo stupore).
Inoltre, in questi casi, a mio avviso, il test unitario tende a rispecchiare il codice sotto test troppo da vicino, e fallisce inutilmente quando il codice in prova cambia (indipendentemente dall'effetto sul comportamento) rendendo i test troppo fragili, rendendo così perdono il loro valore.
Quali sono le tue opinioni in merito?