A meno che tu non abbia intenzione di scrivere il codice senza testarlo, dovrai sempre sostenere il costo del test.
La differenza tra avere test unitari e non averli è la differenza tra il costo di scrittura del test e il costo di eseguirlo rispetto al costo del test a mano.
Se il costo di scrittura di un test unitario è di 2 minuti e il costo dell'esecuzione del test dell'unità è praticamente pari a 0, il costo del test manuale del codice è di 1 minuto, quindi si interrompe anche quando si esegue il test due volte.
Per molti anni ho capito male che non avevo abbastanza tempo per scrivere test unitari per il mio codice. Quando ho fatto dei test, erano cose gonfie e pesanti che mi hanno solo incoraggiato a pensare che avrei dovuto scrivere solo unit test quando sapevo che erano necessari.
Recentemente sono stato incoraggiato a utilizzare Test Driven Development e ho scoperto che si trattava di una rivelazione completa. Ora sono fermamente convinto di non avere il tempo non per scrivere test unitari.
Nella mia esperienza, sviluppando con i test in mente si finiscono con interfacce più pulite, classi più focalizzate e amp; moduli e generalmente più SOLID , codice verificabile.
Ogni volta che lavoro con un codice legacy che non ha test unitari e devo testare manualmente qualcosa, continuo a pensare "questo sarebbe molto più veloce se questo codice avesse già dei test unitari". Ogni volta che devo provare ad aggiungere funzionalità di unit test al codice con un accoppiamento elevato, continuo a pensare che "sarebbe molto più semplice se fosse stato scritto in modo disaccoppiato".
Confronto e contrasto tra le due stazioni sperimentali che supporto. Uno è stato in giro per un po 'e ha una grande quantità di codice legacy, mentre l'altro è relativamente nuovo.
Quando si aggiungono funzionalità al vecchio laboratorio, spesso si arriva al laboratorio e si impiegano molte ore a lavorare sulle implicazioni della funzionalità di cui hanno bisogno e su come posso aggiungere quella funzionalità senza influire su nessuna delle altre funzionalità. Il codice semplicemente non è impostato per consentire il test off-line, quindi praticamente tutto deve essere sviluppato on-line. Se provassi a sviluppare offline, avrei finito con più oggetti fittizi di quanto sarebbe ragionevole.
Nel laboratorio più recente, di solito posso aggiungere funzionalità sviluppandolo off-line sulla mia scrivania, prendendo in giro solo le cose che sono immediatamente necessarie, e quindi impiegando solo un breve periodo di tempo in laboratorio, stirare eventuali problemi rimanenti, non raccolto fuori linea.
TL; DR versione:
Scrivi un test quando il costo di scrittura del test, più il costo di eseguirlo tutte le volte che è necessario, è probabilmente inferiore al costo di testarlo manualmente tutte le volte che è necessario.
Ricorda però che se usi TDD, è probabile che il costo della scrittura dei test diminuisca man mano che migliora e, a meno che il codice non sia assolutamente banale, probabilmente finirai per eseguire i test più spesso del previsto.