c unit-testing tdd rspec

Pruebas de marcos para C



unit-testing tdd (9)

Después de trabajar un poco con Ruby, Rails y RSpec el verano pasado, aprendí a usar TATFT . Ahora no puedo escribir código sin escribir pruebas primero.

Voy a tomar un curso de programación en C el próximo año, y me gustaría aprender a escribir en C. ¿Es una buena idea (o incluso posible) hacer TDD con C? Si es así, ¿hay algún buen marco de prueba compatible con C?


Hay una serie de arneses de prueba de unidades para C. Wikipedia tiene una lista mucho mejor de la que pude reunir aquí .


Si realmente está utilizando un compilador de C ++, pero lo usa en modo ''C'' al compilar archivos .c, entonces, cualquiera de los marcos de prueba de la unidad C ++ funcionará bien.

Eche un vistazo a la lista original de marcos xUnit en http://www.xprogramming.com/software.htm


Acabo de descubrir CSpec , que hace BDD en C. No parece muy maduro, pero me recuerda a RSpec.


Entonces, un programador de C adecuado le dirá que, debido a que C está tipado estáticamente, atrapa todos los errores que pueda tener y, por lo tanto, no necesita un marco de prueba de la unidad.

Están llenos de mierda, pero ese es el argumento para los lenguajes de tipo estático como C.

Creo que probablemente debas tomar el enfoque que Adobe hizo con Photoshop. Escriba una serie de bibliotecas principales en C, y luego toda la cola y la lógica real de la aplicación deberían estar en un lenguaje de nivel superior. Photoshop está escrito principalmente en Lua, pero muchos idiomas funcionan para esto.


Usamos "check" de http://check.sourceforge.net/ , proporciona funcionalidad básica para testsuites y tests (similar a junit), pero es bastante liviano. En la característica que me gusta es que maneja si su prueba arroja el código y considera que es una falla.

También tenga en cuenta que "verificar" es un marco basado en "C" en lugar de uno "C ++".


¿Es una buena idea (o incluso posible) hacer TDD con C?

Sí, obviamente es una buena idea, como con otros idiomas. Sin embargo, debido a la naturaleza de procedimiento del idioma, viene con algunas dificultades más.

  • Las funciones estáticas se ponen rápidamente en el camino. Esto puede resolverse incluyendo el archivo fuente bajo prueba o definiendo una macro ESTÁTICA que solo significa estático cuando se compila el código para producción, no prueba de unidad

    #if defined(UNIT_TEST) #define STATIC #else #define STATIC static #endif

  • No hay aislamiento: solo hay un contexto global. Con un lenguaje OO puede simplemente crear una instancia de un objeto (o un grupo de objetos colaboradores) para probarlo (ellos), también puede usar objetos simulados. Con C, puede, sin embargo, anular las funciones simplemente redefiniéndolas en las pruebas de su unidad. Esto funciona bien en sistemas tipo Unix donde el enlazador invoca la primera función que está encontrando, no estoy seguro en Windows.

Si es así, ¿hay algún buen marco de prueba compatible con C?

Puede comenzar pequeño con minunit . La curva de aprendizaje es plana ya que solo tiene cuatro macros de largo.

EDITAR: Hay dos listas de marcos UT para el lenguaje C , que se mencionaron en otras respuestas y no repetí : una en Wikepedia y otra en xprogramming.com .


Ciertamente puedes hacer pruebas unitarias en C (sí). El marco que utilizo (para la plataforma de Windows) es CunitWin32



Esta pregunta similar también tiene muchas respuestas "Unit C de C de prueba"

Usé RCUNIT , está maduro y tiene todo lo que necesito. También he usado ipl canata, que es genial pero es muy caro, por lo que la probabilidad no es la que deseas.