Normalmente me encuentro con este problema, y no estoy seguro de cómo superar este obstáculo. Realmente quiero empezar a aprender y aplicar Test-Driven-Development (o BDD, o lo que sea), pero parece que cada aplicación que hago donde quiero aplicar es básicamente CRUD de base de datos estándar, y no estoy seguro de cómo para aplicarlo. Los objetos prácticamente no hacen nada aparte de ser persistentes en una base de datos; no hay una lógica compleja que deba ser probada. Hay una puerta de enlace que eventualmente necesitaré para probar un servicio de terceros, pero quiero obtener primero el núcleo de la aplicación.Aplicación de TDD cuando la aplicación es 100% CRUD
Cada vez que intento escribir pruebas, solo termino probando cosas básicas que probablemente no debería probar en primer lugar (por ejemplo, getters/setters) pero no parece que los objetos tengan nada más. Supongo que podría probar la persistencia, pero esto nunca me parece correcto porque se supone que no se debe llegar a una base de datos, pero si se burla, entonces no se está probando nada porque se controlan los datos que se escupieron; como he visto muchos ejemplos donde hay un repositorio simulado que simula una base de datos mediante un bucle y crea una lista de valores conocidos, y la prueba verifica que el "repositorio" puede recuperar un cierto valor ... Estoy no ver el punto de una prueba como esta porque, por supuesto, el "repositorio" va a devolver ese valor; ¡está codificado en la clase! Bueno, lo veo desde un punto de vista puramente TDD (es decir, necesitas una prueba que diga que tu repositorio necesita un método GetCustomerByName o lo que sea antes de que puedas escribir el método), pero eso parece seguir un dogma sin ninguna otra razón que no sea " el camino "- la prueba no parece estar haciendo nada útil aparte de justificar un método.
¿Estoy pensando en esto de la manera incorrecta?
Por ejemplo, ejecute la aplicación de gestión de contactos de fábrica. Tenemos contactos, y digamos que podemos enviar mensajes a contactos. Por lo tanto, tenemos dos entidades: Contact
y Message
, cada una con propiedades comunes (por ejemplo, nombre, apellido, correo electrónico de contacto, y asunto y cuerpo y fecha del mensaje). Si ninguno de estos objetos tiene un comportamiento real o necesita realizar alguna lógica, ¿cómo aplica TDD al diseñar una aplicación como esta? El único propósito de la aplicación es, básicamente, obtener una lista de contactos y mostrarlos en una página, mostrar un formulario para enviar un mensaje y cosas similares. No veo ningún tipo de pruebas útiles aquí; podría pensar en algunas pruebas, pero serían más o menos pruebas por el solo decir "¡Mire, tengo pruebas!" en lugar de probar realmente algún tipo de lógica (aunque Ruby on Rails hace un buen uso de ella, realmente no considero que validar la prueba sea una prueba "útil" porque debe ser algo que el marco de trabajo se encargue de ti)
acabo de conseguir decir ... Me encanta * * el título de este pregunta. – Shog9
Esta es una muy buena pregunta. Creo que la mayoría de las veces cuando escuchamos argumentos sobre la justificación de costos de TDD, en realidad se habla específicamente de la aplicación CRUD. – Sake
Eso es lo que noté también.Yo * quiero * usar TDD (no necesariamente TDD, pero estoy probando) pero nunca puedo pensar en qué probar cuando la aplicación solo necesita extraer datos. Sin embargo, obtuve excelentes respuestas aquí. –