Qualche tempo fa ho letto, su 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 un'implementazione del metodo è cambiata, non è necessario modificare il caso di test, in quanto ciò infrange il contratto per assicurarsi che il sistema in prova funzioni. In altre parole, un test dovrebbe fallire se il metodo non funziona, ma non perché l'implementazione è cambiata.
Questo ha attirato la mia attenzione quando parliamo di derisione. Dal momento che la derisione si basa fortemente sulle chiamate di aspettativa dal sistema sotto le dipendenze del test, le beffe sono strettamente associate all'implementazione piuttosto che all'interfaccia.
Durante la ricerca di mock vs stub , diversi articoli concordano sul fatto che gli stub dovrebbero essere usati al posto dei mock, poiché non si basano sulle aspettative delle dipendenze, il che significa che il test non necessita di conoscenza del sistema sottostante in fase di implementazione del test.
Le mie domande sarebbero:
- Le beffe violano il principio aperto / chiuso?
- C'è qualcosa che manca nell'argomento a favore degli stub nell'ultimo paragrafo, che rende gli stub non così fantastici contro le beffe?
- Se è così, quando sarebbe un buon caso da deridere e quando sarebbe un buon caso da usare con gli stub?
Since mocking relays heavily on expectation calls from system under test's dependencies...
Penso che sia qui che stai andando storto. Una finta è una rappresentazione artificiale di un sistema esterno. Non rappresenta in alcun modo il sistema esterno, tranne nella misura in cui simula il sistema esterno in modo tale da consentire l'esecuzione di test su codice avente dipendenze da detto sistema esterno. Avrai comunque bisogno di test di integrazione per dimostrare che il tuo codice funziona con il sistema reale e non modificato.