Atheist: Probando módulos C
Vamos a usar Atheist con el módulo CxxTest , de manera que podamos probar un programa C.
Recordemos algo que yo olvidé: Atheist es una herramienta para pruebas de integración (que tiene como algo adicional la posibilidad de integrarse con python-testunit). Eso quiere decir que nuestras pruebas estarán en C, pero las llamaremos desde Atheist.
Para comenzar, escribimos nuestras pruebas C. Primero sólo vamos a comprobar la interacción entre Atheist y CxxTest (lo saco de los ejemplos de Atheist):
|
|
Ahora creamos el archivo de pruebas atheist:
|
|
Y ejecutamos:
|
|
Un ejemplo más real
Ahora voy a probar un ejemplo algo más real. Voy a hacer una pequeña función que calcula el factorial de un número. Para ello, necesitaré un archivo con mi función, un archivo de cabecera con la declaración de mi función, y el archivo de pruebas. Vamos al lío:
Archivo factorial.h
:
|
|
Archivo factorial.c
|
|
Archivo factorial.cc
|
|
Archivo cxxtest.test
:
|
|
Tened en cuenta que, para ejecutarlo, necesitaremos compilar factorial.o
, por lo que tendremos:
|
|
Unas explicaciones
Cuento un poco algunas cosas “raras” que se ven en el código.
Por un lado, vemos que en el archivo factorial.h
Hemos incluido unas marcas extrañas:
|
|
Esto se hace así para que C++ “entienda” que lo que se va a definir ahí es C. Cuando compilamos código C++, las funciones se renombran añadiéndoles un prefijo y un sufijo, por lo que hay que indicarle que eso es código C para que el compilador pueda encontrar las funciones.
Por otra parte, hemos necesitado indicarle a Atheist algunos parámetros extra, como son los flags de compilación (sólo hemos necesitado la ruta de los .h), y qué objetos se han utilizado.
Transformando Atheist en una herramienta de generación
No es lo más recomendable, pero podríamos usar Atheist para compilar:
|
|
Detección de errores
Es normal que ocurra algún problema en la ejecución de CxxTest, ya que realiza pasos muy complejos. Por ello recomiendo utilizar siempre Atheist con las opciones “-e” (mostrar salida de error) y “-o” (mostrar salida estándar).
De esta manera será más sencillo descubrir errores de compilación de CxxTest.