Most (tutti?) TDD risorse ti mostrano come va il ciclo:
- Scrivi test
- Verifica test
- Scrivi codice di produzione
- Verifica test
- Pulisci codice produzione
- Verifica test
Anche loro - per me - sembrano implicare che tutto il codice è coperto dai test .
Tuttavia, leggere post come Writing Great Unit Test: Best and Worst Practices (ad esempio, collegato a qui ) si dice che
TDD is a robust way of designing software components (“units”) interactively so that their behaviour is specified through unit tests
Per inserire un altro contesto:
At the other end of the scale, integration tests contain no knowledge about how your codebase is broken down into units, but instead make statements about how the whole system behaves towards an external user.
Questo ha perfettamente senso per me. Tuttavia, implica che parti di grandi dimensioni delle codice delle applicazioni sono non coperte dai test . Perché? Perché se hai unità (e hai bisogno di un sacco di unità per ottenere i tuoi Test di unità a posto) hai bisogno di un codice che colleghi le unità. Questo codice, IMHO, sarà abbastanza complicato da meritare di essere testato a un livello più granulare che i test di integrazione, mentre probabilmente ricade in "Dirty Hybris":
Anywhere in between, it’s unclear what assumptions you’re making and what you’re trying to prove. Refactoring might break these tests, or it might not, regardless of whether the end-user experience still works
Quindi riassumendo:
- Vedo facilmente il valore dei test Unità con TDD
- È necessario un codice per collegare insieme le unità
- Questo codice sarà complesso e il test di integrazione sarà / potrebbe non essere sufficiente.
- Le risorse TDD in rete sembrano implicare il 100% di copertura del codice / test, tuttavia
- guardare TDD con i test delle unità reali lascerà un codice non testato
Modifica: dice wikipedia :
Integration testing takes as its input modules that have been unit tested
ma in qualche modo ritengo che ci sia ancora un bel po 'di codice di cablaggio mancante nell'immagine. (eccetto se "modulo" significa "classe o funzione" perché quello è l'unità testata in isolamento)
Approfondimenti?