test - sentencia if en jstl
Cómo probar el código C (6)
Esta pregunta ya tiene una respuesta aquí:
- Unit Testing C Code [cerrado] 31 respuestas
¿Cómo se realizan las pruebas de prueba de unidad en C? ¿Qué marco o haces otras pruebas como pruebas unitarias en el nivel del código?
Es posible que desee echarle un vistazo a cfix : es un marco de pruebas unitarias especializado para plataformas Win32 y modo kernel NT. Admite C y C ++.
Personalmente, me gusta el marco de prueba de Google .
La verdadera dificultad para probar el código C es romper las dependencias de los módulos externos para que pueda aislar el código en unidades. Esto puede ser especialmente problemático cuando intenta hacerse pruebas del código heredado. En este caso, a menudo me encuentro utilizando el enlazador para usar funciones stubs en las pruebas.
Esto es a lo que la gente se refiere cuando hablan de " costuras ". En C, su única opción es utilizar el preprocesador o el vinculador para simular sus dependencias.
Un conjunto de pruebas típico en uno de mis proyectos C podría verse así:
#include "myimplementationfile.c"
#include <gtest/gtest.h>
// Mock out external dependency on mylogger.o
void Logger_log(...){}
TEST(FactorialTest, Zero) {
EXPECT_EQ(1, Factorial(0));
}
Tenga en cuenta que en realidad está incluyendo el archivo C y no el archivo de encabezado . Esto brinda la ventaja de tener acceso a todos los miembros de datos estáticos. Aquí hago una maqueta de mi logger (que podría estar en logger.o y le doy una implementación vacía. Esto significa que el archivo de prueba compila y enlaza de forma independiente del resto de la base de código y se ejecuta de forma aislada.
En cuanto a la compilación cruzada del código, para que esto funcione se necesitan buenas instalaciones en el objetivo. He hecho esto con googletest cross compiled en Linux en una arquitectura PowerPC. Esto tiene sentido porque allí tienes un shell completo y un sistema operativo para recopilar tus resultados. Para entornos menos ricos (que clasifico como cualquier cosa sin un sistema operativo completo), debería simplemente compilar y ejecutar en el host. Deberías hacer esto de todos modos para que puedas ejecutar las pruebas automáticamente como parte de la compilación.
Encuentro que probar el código C ++ es generalmente mucho más fácil debido al hecho de que el código OO en general está mucho menos acoplado que el de los procedimientos (por supuesto, esto depende mucho del estilo de codificación). También en C ++ puedes usar trucos como la inyección de dependencia y la anulación de método para obtener un código que, de lo contrario, se encapsula.
Michael Feathers tiene un excelente libro sobre pruebas de código heredado . En un capítulo cubre técnicas para tratar con código no OO que recomiendo encarecidamente.
Editar : He escrito una publicación de blog sobre el código de procedimiento de prueba de la unidad, con la fuente disponible en GitHub .
Puede encontrar información sobre varios marcos de prueba de unidades C en www.xprogramming.com , en particular en el enlace del software .
Si está usando Windows como su entorno de desarrollo, CUnitWin32 podría servir para su propósito
XCode en Mac tiene algo que ellos llaman tipo de CPTest incorporado. Hice una versión portátil que publiqué aquí
http://www.loufranco.com/blog/files/AppleCppUnitPort.html
Estaba apuntando a gcc en Windows, pero me imagino que funcionaría en otro lado, y es un marco muy simple si quieres ver cómo implementar tal cosa.
El control es un buen marco de prueba para C.