Estoy tratando de envolver mi cabeza alrededor de TDD, específicamente la parte de desarrollo. He visto algunos libros, pero los que encontré abordan principalmente la parte de prueba: la Historia de NUnit, por qué la prueba es buena, Red / Green / Refactor y cómo crear una calculadora de cadenas.
Cosas buenas, pero eso es "solo" Pruebas unitarias, no TDD. Específicamente, no entiendo cómo TDD me ayuda a obtener un buen diseño si necesito un Diseño para comenzar a probarlo.
Para ilustrar, imagine estos 3 requisitos:
- Un catálogo debe tener una lista de productos
- El catálogo debe recordar qué productos vio un usuario
- Los usuarios deben poder buscar un producto
En este punto, muchos libros sacan un conejo mágico de un sombrero y simplemente se sumergen en "Probando el Servicio de Producto", pero no explican cómo llegaron a la conclusión de que hay un Servicio de Producto en primer lugar. Esa es la parte de "Desarrollo" en TDD que estoy tratando de entender.
Es necesario que exista un diseño, pero no se puede encontrar nada fuera de los servicios de la entidad (es decir, hay un Producto, por lo que debería haber un Servicio de Producto) (por ejemplo, el segundo requisito requiere que tenga algunos El concepto de un usuario, pero ¿dónde pondría la funcionalidad para recordarlo? ¿Y es Search una función del ProductService o un SearchService separado? ¿Cómo sabría cuál debería elegir?)
Según SOLID , necesitaría un UserService, pero si diseño un sistema sin TDD, podría terminar con un montón de servicios de método único. ¿TDD no tiene la intención de hacerme descubrir mi diseño en primer lugar?
Soy un desarrollador de .net, pero los recursos de Java también funcionan. Creo que no parece haber una aplicación o libro de muestra real que se ocupe de una línea real de aplicación comercial. ¿Puede alguien proporcionar un ejemplo claro que ilustre el proceso de creación de un diseño utilizando TDD?