A meno che tu non scriva codice senza testarlo, dovrai sempre sostenere i costi del test.
La differenza tra avere unit test e non averli è la differenza tra il costo di scrivere il test e il costo di eseguirlo rispetto al costo del test a mano.
Se il costo per scrivere un test unitario è di 2 minuti e il costo per l'esecuzione del test unitario è praticamente pari a 0, ma il costo per testare manualmente il codice è di 1 minuto, si interrompe anche quando si è eseguito il test due volte.
Per molti anni ho avuto il malinteso di non avere abbastanza tempo per scrivere test unitari per il mio codice. Quando scrivevo i test, erano cose gonfie e pesanti che mi incoraggiavano solo a pensare che avrei dovuto scrivere sempre unit test solo quando sapevo che erano necessari.
Di recente sono stato incoraggiato a utilizzare Test Driven Development e l'ho trovato una rivelazione completa. Ora sono fermamente convinto di non avere il tempo di non scrivere unit test .
Nella mia esperienza, sviluppando pensando ai test, si ottengono interfacce più pulite, classi e moduli più mirati e in genere più codice SOLID , testabile.
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 elevato accoppiamento, continuo a pensare "sarebbe molto più facile se fosse stato scritto in modo disaccoppiato".
TL; versione DR :
Scrivi un test quando è probabile che il costo di scrittura del test, oltre al costo di eseguirlo tutte le volte che è necessario, sia 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 migliorerai e, a meno che il codice non sia assolutamente banale, probabilmente finirai per eseguire i test più spesso di quanto ti aspetti.