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".
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 dei test di scrittura diminuisca man mano che migliori e, a meno che il codice sia assolutamente banale, probabilmente finirai per eseguire i test più spesso di quanto ti aspetti.