Prima di tutto, TDD non ti obbliga a scrivere codice SOLID. Potresti fare TDD e creare un grande casino se lo desideri.
Naturalmente, conoscere i principi SOLID aiuta, perché altrimenti potresti semplicemente non avere una buona risposta a molti dei tuoi problemi, e quindi scrivere codici errati accompagnati da test errati.
Se conosci già i principi SOLID, TDD ti incoraggerà a pensarci e ad usarli attivamente.
Detto questo, non copre necessariamente tutte le lettere in SOLID , ma ti incoraggia fortemente e ti promuove a scrivere almeno in parte il codice SOLID, perché rende le conseguenze di non farlo immediatamente visibili e fastidiose.
Per esempio:
- Devi scrivere il codice disaccoppiato in modo da poter deridere ciò di cui hai bisogno. Questo supporta il principio di inversione di dipendenza .
- È necessario scrivere test chiari e brevi in modo da non dover cambiare troppo nei test (che può diventare una grande fonte di rumore del codice se fatto diversamente). Ciò supporta il principio di responsabilità singola .
- Questo può essere discusso, ma il principio di segregazione dell'interfaccia consente alle classi di dipendere da interfacce più leggere che rendono il deridere più facile da seguire e da capire, perché non devi chiedere "Perché non sono stati derisi anche questi 5 metodi?", Oppure ancora più importante, non hai molta scelta quando decidi quale metodo prendere in giro. Questo è utile quando non vuoi davvero esaminare l'intero codice della classe prima di testarlo, e usa semplicemente tentativi ed errori per avere una comprensione di base di come funziona.
L'adesione al principio Open / Closed può aiutare i test scritti dopo il codice, poiché in genere consente di ignorare le chiamate di servizio esterne nelle classi di test che derivano dalle classi sotto test. Nel TDD credo che questo non sia richiesto come altri principi, ma potrei sbagliarmi.
L'adesione alla regola di sostituzione di Liskov è ottima se si desidera ridurre al minimo le modifiche affinché la classe riceva un'istanza non supportata che capita solo di implementare la stessa interfaccia di tipo statico, ma non è probabile che accada in casi di test appropriati perché si è generalmente non passerà nessuna classe sotto test alle implementazioni reali delle sue dipendenze.
Ancora più importante, i principi SOLID sono stati creati per incoraggiarti a scrivere codice più pulito, più comprensibile e gestibile, e così è stato TDD. Quindi, se esegui TDD correttamente e presti attenzione all'aspetto del tuo codice e dei tuoi test (e non è così difficile perché ottieni feedback immediati, API e correttezza saggia), puoi preoccuparti di meno dei principi SOLID, in generale.