Sto tentando di prendere l'abitudine di scrivere regolarmente unit test con il mio codice, ma ho letto che prima è importante scrivere codice testabile . Questa domanda tocca i principi SOLIDI della scrittura di codice verificabile, ma voglio sapere se quei principi di progettazione sono vantaggiosi (o almeno non dannosi) senza pianificare affatto la scrittura di test. Per chiarire: capisco l'importanza di scrivere test; questa non è una domanda sulla loro utilità.
Per illustrare la mia confusione, nel pezzo che ha ispirato questa domanda, lo scrittore fornisce un esempio di una funzione che controlla l'ora corrente e restituisce un valore a seconda dell'ora. L'autore indica questo come codice errato perché produce i dati (il tempo) che utilizza internamente, rendendo così difficile il test. Per me, tuttavia, sembra eccessivo passare il tempo come argomento. Ad un certo punto il valore deve essere inizializzato, e perché non più vicino al consumo? Inoltre, lo scopo del metodo nella mia mente è quello di restituire un valore basato sul tempo corrente , rendendolo un parametro che implica che questo scopo possa / debba essere modificato. Questa e altre domande mi portano a chiedermi se il codice testabile fosse sinonimo di codice "migliore".
Scrivere codice testabile è ancora una buona pratica anche in assenza di test?
Il codice testabile è effettivamente più stabile? è stato suggerito come duplicato. Tuttavia, questa domanda riguarda la "stabilità" del codice, ma sto chiedendo più ampiamente se il codice è superiore anche per altri motivi, come la leggibilità, le prestazioni, l'accoppiamento e così via.
func(X)
ritorna "Morning"
, quindi la sostituzione di tutte le occorrenze di func(X)
with "Morning"
non cambierà il programma (cioè la chiamata func
non fa altro che restituire il valore). L'idempotenza implica sia quello func(func(X)) == X
(che non è corretto per tipo), sia quello che func(X); func(X);
produce gli stessi effetti collaterali di func(X)
(ma qui non ci sono effetti collaterali)