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?
X1che stai dicendo che Ximplementa l'interfaccia X1. Se cambi l'interfaccia X1al X2mock 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 Anon dovrebbe dipendere dai dettagli di implementazione (che è ciò che cambieresti in quel caso). Quindi i test unitari Asono ancora corretti e ti dicono che Afunziona data un'implementazione ideale dell'interfaccia.