2008-10-07 12 views
6

Duplicar posibles:
Unit Testing C Codemarcos de las pruebas unitarias para C

que he visto algunas preguntas específicas a C++, pero estoy realmente curioso sobre C. Estoy intentando para agregar un marco de prueba de unidad estándar en nuestro entorno de compilación. Mis objetivos principales son alentar a nuestros desarrolladores a escribir pruebas unitarias y estandarizar esas pruebas para que otros puedan ejecutarlas. Idealmente, me gustaría ejecutar las pruebas unitarias como parte de nuestra construcción nocturna.

Comenzamos a trabajar con CUnit, que funcionaba excepto que todo se ejecutaba en un hilo y las fallas de memoria provocaban que las pruebas unitarias dejaran de funcionar, lo cual era bastante molesto. También me pareció increíblemente difícil escribir las pruebas, pero eso podría ser solo una prueba para ti.

¿Alguien sabe de buenas alternativas? ¿Alguien ha tenido alguna experiencia con el C++ Unit Testers con código C-only?

+0

Consulte [aquí] [1] para obtener su respuesta. (Duplicado) [1]: http: //stackoverflow.com/questions/65820/unit-testing-c-code – jjnguy

Respuesta

0

Comenzamos a trabajar con CUnit, que funcionaba excepto que todo se ejecutaba en un hilo y las fallas de memoria provocaban que las pruebas unitarias dejaran de funcionar, lo cual era bastante molesto.

Hay un marco de pruebas de unidad C que se bifurca y ejecuta cada uno de los casos de prueba en un proceso separado de modo que todas las pruebas se ejecutan incluso en presencia de pruebas que volcado de núcleo: Check

Sin embargo, I' Tengo miedo de la penalidad de rendimiento que traen todos estos tenedores (y para ser honesto, no lo intenté). Pero no voy a vivir mucho tiempo con un único centro de prueba de dumping: generalmente lo soluciono de inmediato.

Un truco para evitar que las pruebas de unidad de núcleo es la assertion guard, por ejemplo: utilizar una afirmación para evitar el uso de un puntero NULL (ejemplo con minunit).

void test_function_returning_a_pointer(void) 
{ 
    struct_t *theStruct = function_returning_a_pointer(); 
    MU_ASSERT(theStruct != NULL); 

    //--- now you can use the pointer 
    MU_ASSERT(theStruct->field1 == 0); 

    return MU_PASSED; 
} 

Por cierto, no estoy al tanto de cualquier marco de ensayo C++ unidad que no se colgará en caso de violación de la segmentación.

También me pareció increíblemente difícil escribir las pruebas, pero podría ser una prueba unitaria para usted.

¿Podría explicar sus dificultades? ¿Estás tratando de poner el código heredado bajo prueba?

0

En el caso de que tenga como objetivo las plataformas Win32 o el modo kernel NT, debería echarle un vistazo al cfix.

1

Escribo software integrado usando C y he decidido escribir mi propio marco. Es muy simple y está escrito para MS Visual Studio. Es fácilmente portado a otras plataformas.

http://code.google.com/p/cunitwin32/

Si usted está apuntando Linux creo que podría Comprobar la habitación sus necesidades.

+0

P.S.Maneja las violaciones de acceso a la memoria, etc. con gracia (también lo uso en un entorno automatizado) – Dushara

Cuestiones relacionadas