Hai una classe X e scrivi alcuni unit test che verificano il comportamento X1. C'è anche la classe A che prende X come dipendenza.
Quando scrivi test unitari per A, deridi X. In altre parole, mentre test unitario A, imposti (postulato) il comportamento di derisione di X su X1. Il tempo passa, le persone usano il sistema, hanno bisogno di cambiamenti, X si evolve: si modifica X per mostrare il comportamento X2. Ovviamente, i test unitari per X falliranno e dovrai adattarli.
Ma cosa succede con A? I test unitari per A non falliranno quando il comportamento di X viene modificato (a causa della derisione di X). Come rilevare che il risultato di A sarà diverso quando eseguito con la X "reale" (modificata)?
Mi aspetto risposte sulla falsariga di: "Non è questo lo scopo del test unitario", ma che valore ha allora il test unitario? Ti dice davvero solo che quando tutti i test passano, non hai introdotto un cambiamento sostanziale? E quando il comportamento di alcune classi cambia (volontariamente o involontariamente), come puoi rilevare (preferibilmente in modo automatizzato) tutte le conseguenze? Non dovremmo concentrarci maggiormente sui test di integrazione?
X1
che stai dicendo che X
implementa l'interfaccia X1
. Se cambi l'interfaccia X1
al X2
mock che hai usato negli altri test, non dovresti più compilare, quindi sei costretto a correggere anche quei test. I cambiamenti nel comportamento della classe non dovrebbero avere importanza. In effetti, la tua classe A
non dovrebbe dipendere dai dettagli di implementazione (che è ciò che cambieresti in quel caso). Quindi i test unitari A
sono ancora corretti e ti dicono che A
funziona data un'implementazione ideale dell'interfaccia.