Innanzitutto, alcune definizioni:
Un test unitario testa le unità in modo isolato dalle altre unità, ma ciò significa che non è concretamente definito da alcuna fonte autorevole, quindi definiamolo un po 'meglio: se i confini dell'I / O vengono attraversati (se quell'I / O è di rete, disco, schermo o input dell'interfaccia utente), esiste un punto semi-obiettivo in cui possiamo tracciare una linea. Se il codice dipende dall'I / O, sta attraversando un confine dell'unità e quindi dovrà deridere l'unità responsabile di quell'I / O.
In base a tale definizione, non vedo una ragione convincente per deridere cose come le funzioni pure, il che significa che il test unitario si presta a funzioni pure o funzioni senza effetti collaterali.
Se vuoi unità di test unit con effetti, le unità responsabili degli effetti dovrebbero essere derise, ma forse dovresti prendere in considerazione un test di integrazione. Quindi, la risposta breve è: "se hai bisogno di deridere, chiediti se quello di cui hai veramente bisogno è un test di integrazione". Ma qui c'è una risposta migliore, più lunga, e la tana del coniglio diventa molto più profonda. Le simulazioni possono essere il mio odore di codice preferito perché c'è così tanto da imparare da loro.
Odori di codice
Per questo, ci rivolgeremo a Wikipedia:
Nella programmazione del computer, un odore di codice è una caratteristica del codice sorgente di un programma che potrebbe indicare un problema più profondo.
Continua più tardi ...
"Gli odori sono determinate strutture nel codice che indicano una violazione dei principi fondamentali del design e influiscono negativamente sulla qualità del design". Suryanarayana, Girish (novembre 2014). Refactoring per gli odori di progettazione del software. Morgan Kaufmann. p. 258.
Gli odori di codice di solito non sono bug; non sono tecnicamente errati e non impediscono il funzionamento del programma. Invece, indicano debolezze nella progettazione che potrebbero rallentare lo sviluppo o aumentare il rischio di bug o guasti in futuro.
In altre parole, non tutti gli odori di codice sono cattivi. Invece, sono indicazioni comuni che qualcosa potrebbe non essere espresso nella sua forma ottimale e l'odore può indicare un'opportunità per migliorare il codice in questione.
In caso di derisione, l'odore indica che le unità che sembrano chiamare derisioni dipendono dalle unità da deridere. Potrebbe essere un'indicazione che non abbiamo scomposto il problema in pezzi atomicamente risolvibili e che potrebbe indicare un difetto di progettazione nel software.
L'essenza di tutto lo sviluppo del software è il processo di scomporre un grosso problema in pezzi più piccoli e indipendenti (decomposizione) e comporre le soluzioni insieme per formare un'applicazione che risolva il grande problema (composizione).
La derisione è necessaria quando le unità utilizzate per suddividere il problema di grandi dimensioni in parti più piccole dipendono l'una dall'altra. Detto in altro modo, è necessario prendere in giro quando le nostre presunte unità atomiche di composizione non sono realmente atomiche e la nostra strategia di decomposizione non è riuscita a scomporre il problema più grande in problemi più piccoli e indipendenti da risolvere.
Ciò che rende il deridere un odore di codice non è che ci sia qualcosa di intrinsecamente sbagliato nel deridere - a volte è molto utile. Ciò che lo rende un odore di codice è che potrebbe indicare una fonte problematica di accoppiamento nella tua applicazione. A volte rimuovere quella fonte di accoppiamento è molto più produttivo che scrivere una finta.
Esistono molti tipi di accoppiamento e alcuni sono migliori di altri. Capire che le beffe sono un odore di codice può insegnarti a identificare ed evitare i peggiori tipi all'inizio del ciclo di vita del design dell'applicazione, prima che l'odore diventi qualcosa di peggio.