Esta es una pregunta difícil y abierta que sé, pero pensé en tirarla al piso y ver si alguien tenía alguna sugerencia interesante.¿Cómo debo probar la unidad de un generador de código?
He desarrollado un generador de código que lleva nuestra interfaz python a nuestro código C++ (generado a través de SWIG) y genera el código necesario para exponer esto como WebServices. Cuando desarrollé este código, lo hice usando TDD, pero mis pruebas me parecieron frágiles como el infierno. Como cada prueba esencialmente quería verificar que para un bit dado de código de entrada (que resulta ser un encabezado C++) obtuve un bit dado de código de salida. Escribí un pequeño motor que lee definiciones de prueba de archivos de entrada XML y genera pruebas casos de estas expectativas.
El problema es que me da miedo entrar para modificar el código. Eso y el hecho de que la unidad se prueba a sí misma son a: compleja, y b: frágil.
Así que estoy tratando de pensar en enfoques alternativos a este problema, y me parece que quizás estoy abordando el camino equivocado. Tal vez deba enfocarme más en el resultado, IE: ¿el código que genero realmente se ejecuta y hago lo que quiero, en lugar de que el código se vea como yo quiero?
¿Alguien ha tenido alguna experiencia de algo similar a esto que les gustaría compartir?
En realidad, estoy enfrentando el mismo problema, y ninguna de las respuestas a continuación es realmente satisfactoria. De acuerdo, puedes probar las piezas de un generador de código. El problema es cómo saber que el código generado es correcto, es decir, que no hay regresiones ni nada de eso, y por lo tanto, ¿cómo se escriben las pruebas automatizadas para el código generado (ya sea que se las llame unidades o pruebas de integración)? –
@James: no hay una respuesta fácil ... Acabo de volver a leer esta pregunta y las respuestas y todos los problemas que tuve en ese momento vienen de regreso. Puedo darle otra oportunidad en las próximas semanas porque estoy terminando con varias regresiones de vez en cuando y cada vez es más crítico detectarlas. – jkp
Es una gran comparación masiva de cuerdas. Podría ser más fácil usar un AST – Nikos