Una delle ragioni principali per fare test è costruire la tua fiducia nel tuo codice. È possibile dimostrare che il codice testato ha una funzionalità specifica perché i test dicono che lo fanno. La fiducia cresce dalla prova. La domanda è, scorrendo tutto il INEDIBLE_GOATS
, ottieni più fiducia nel tuo codice? In entrambi i casi, con test sia positivi che negativi, si copre il codice rilevante. Con il ciclo, però, stai praticamente esercitando queste linee più e più volte. In sostanza, stai verificando che List<Goat>#contains()
faccia ciò che dice. Guadagni qualcosa da quello? Se ritieni che un List
funzioni come dovrebbe, allora no, non ottieni nulla di aggiuntivo. Se, d'altra parte, non sei sicuro che un List
funzioni come dovrebbe, dovresti avere un test separato di List#contains()
per darti quella sicurezza.
Devi anche bilanciare il numero di test con le prestazioni della tua suite di test. Ripassare tutto il INEDIBLE_GOATS
può darti un po 'più di sicurezza, ma se ci sono, diciamo, 1,8 milioni di loro, e il test dura più di 30 secondi, questa minuscola sicurezza aggiuntiva supera il tempo perduto (e la conseguente perdita di produttività ).
Infine, anche se INEDIBLE_GOATS
può avere solo un piccolo numero di elementi, teoricamente, il numero di% non commestibile Goat
s potrebbe essere infinito. È impossibile testare ogni potenziale Goat
. Mentre in questo esempio semplificato, si può dire che non ci sarà veramente un% infinito di% co_de, in generale, dobbiamo rendere conto di input infiniti e quasi infiniti possibili e accettare che non possiamo praticamente testare tutto . Dobbiamo anche renderci conto che questa è una buona cosa. Non tutti gli input sono uguali e provare a testare tutto non ci procurerebbe più fiducia. Sta ottimizzando i test di fiducia che li rendono pratici e redditizi.