¿Hay alguna aplicación de código abierto que se desarrolle utilizando un desarrollo basado en pruebas que sirva como modelo de cómo deberían funcionar las pruebas unitarias?
Prefiero ver ejemplos en C # y .NET. (Tenga en cuenta que mencioné aplicaciones, no solo bibliotecas).
Soy un programador de nivel medio que realmente quiere creer y practicar TDD. La aplicación en la que trabajo en mi trabajo diario es bastante complicada, aproximadamente 1 millón de líneas de código, y me encantaría presentar más pruebas unitarias. Tenemos algunas pruebas unitarias, pero mis esfuerzos en TDD y en trabajar en código que ya está bajo prueba no han sido alentadores.
En mi experiencia ciertamente limitada, TDD parece alentar una gran complejidad en nombre del desacoplamiento. Los bits de la aplicación que son difíciles de probar, y que casualmente tienden a ser críticos, son empujados a la periferia, al ámbito de las pruebas de integración que pueden o no escribirse. (Estoy pensando en los sospechosos habituales aquí, acceso al sistema de archivos, objetos hidratantes de una base de datos, llamadas web asincrónicas, etc.)
El código que se está probando tiende a involucrar mucha colaboración entre objetos, y tal vez una lógica de flujo simple, todo lo cual sucede en la memoria y que podría decirse que podría escribirse de una manera más simple y más comprensible si todo no tuviera que estar totalmente desacoplado para las pruebas.
Entiendo las técnicas para burlarse de las dependencias y demás, pero en mi experiencia el uso intensivo de la burla conduce a pruebas muy frágiles. Si mi primer instinto al ver que un grupo de pruebas se vuelve rojo es: "Genial, ahora tengo que arreglar todos los simulacros", entonces mis pruebas se han convertido en un obstáculo en lugar de una red de seguridad.
Estoy tratando de superar esta barrera mental, y como parte de eso estoy leyendo el libro de Michael Feathers, Working Effectively with Legacy Code . Espero que me muestre algo de lo que me estoy perdiendo.
También me gustaría estudiar algunas aplicaciones .NET no triviales con buena cobertura de código, tal vez un sistema de administración de contenido o una aplicación CRUD. El marco de prueba FitNesse del que habla el tío Bob es algo que probablemente miraré, pero sería bueno ver algo escrito en el idioma con el que estoy más familiarizado.
Cualquier sugerencia o palabra de sabiduría sería apreciada.