En primer lugar, TDD no lo obliga estrictamente a escribir código SOLIDO. Podrías hacer TDD y crear un gran desastre si quisieras.
Por supuesto, conocer los principios SÓLIDOS ayuda, porque de lo contrario puede terminar sin tener una buena respuesta a muchos de sus problemas y, por lo tanto, escribir un código incorrecto acompañado de malas pruebas.
Si ya conoce los principios de SOLID, TDD lo alentará a pensar en ellos y usarlos activamente.
Dicho esto, no necesariamente cubre todas las letras en SOLID , pero lo alienta y lo promueve a que escriba código al menos parcialmente SOLID, porque hace que las consecuencias de no hacerlo sean inmediatamente visibles y molestas.
Por ejemplo:
- Necesita escribir código desacoplado para que pueda burlarse de lo que necesita. Esto apoya el principio de inversión de dependencia .
- Debe escribir pruebas que sean claras y cortas para que no tenga que cambiar demasiado en las pruebas (lo que puede convertirse en una gran fuente de ruido de código si se hace de otra manera). Esto apoya el Principio de Responsabilidad Única .
- Esto puede discutirse, pero el Principio de segregación de interfaz permite que las clases dependan de interfaces más ligeras que hacen que la burla sea más fácil de seguir y comprender, porque no tiene que preguntarse "¿Por qué no se burlaron estos 5 métodos también?", O aún más importante, no tienes muchas opciones al decidir qué método burlarte. Esto es bueno cuando realmente no desea repasar todo el código de la clase antes de probarlo, y solo usa prueba y error para obtener una comprensión básica de cómo funciona.
Cumplir con el principio Abierto / Cerrado puede ayudar a las pruebas que se escriben después del código, porque generalmente le permite anular las llamadas de servicio externas en las clases de prueba que se derivan de las clases bajo prueba. En TDD, creo que esto no es tan obligatorio como otros principios, pero puedo estar equivocado.
Cumplir con la regla de sustitución de Liskov es excelente si desea minimizar los cambios para que su clase reciba una instancia no admitida que simplemente implemente la misma interfaz estáticamente tipada, pero no es probable que suceda en los casos de prueba adecuados porque generalmente no pasará ninguna clase bajo prueba de las implementaciones del mundo real de sus dependencias.
Lo más importante, los principios SÓLIDOS se hicieron para alentarlo a escribir un código más limpio, más comprensible y fácil de mantener, y también lo fue TDD. Entonces, si hace TDD correctamente y presta atención a cómo se ven su código y sus pruebas (y no es tan difícil porque obtiene comentarios inmediatos, API y corrección), puede preocuparse menos por los principios SOLID, en general.