Qualche tempo fa ho letto, in una risposta Stack Overflow che non riesco a trovare, una frase che spiegava che dovresti testare le API pubbliche e l'autore ha detto che dovresti testare le interfacce. L'autore ha anche spiegato che se l'implementazione di un metodo è cambiata, non è necessario modificare il caso di test, in quanto ciò interromperebbe il contratto che garantisce il funzionamento del sistema in prova. In altre parole, un test dovrebbe fallire se il metodo non funziona, ma non perché l'implementazione sia cambiata.
Questo ha richiamato la mia attenzione quando parliamo di derisione. Dal momento che il mocking si affida pesantemente alle chiamate di aspettativa dalle dipendenze del sistema sotto test, i mock sono strettamente accoppiati con l'implementazione piuttosto che con l'interfaccia.
Durante la ricerca di simulacro vs stub , diversi articoli concordano che gli stub dovrebbero essere usati al posto dei mock, poiché non dipendono dalle aspettative delle dipendenze, il che significa che il test non ha bisogno di conoscenza del sistema sottostante implementazione del test.
Le mie domande sarebbero:
- Le motte violano il principio di apertura / chiusura?
- C'è qualcosa che manca nell'argomento a favore degli stub nell'ultimo paragrafo, che rendono gli stub non così grandi contro i mock?
- Se sì, quando sarebbe opportuno utilizzare un caso di simulazione e quando sarebbe opportuno utilizzare gli stub?