Cómo crear pruebas para "make check" con GNU autotools
Estoy usando GNU autotools para el sistema de compilación en un proyecto en particular. Quiero empezar a escribir pruebas automatizadas para la verificación. Me gustaría simplemente escribir "make check" para que ejecute automáticamente estos. Mi proyecto está en C++, aunque todavía tengo curiosidad por escribir pruebas automatizadas para otros lenguajes también.
¿Es esto compatible con casi todos los marcos de pruebas unitarias que existen (estaba pensando en usar cppunit)? ¿Cómo puedo conectar estos marcos de pruebas unitarias en hacer el cheque? ¿Puedo asegurarme de no requerir que se instale el software de prueba unitaria para poder configurar y compilar el resto del proyecto?
4 answers
Para realizar una ejecución de prueba cuando emita make check
, debe agregarlos a la variable TESTS
Suponiendo que ya ha construido el ejecutable que ejecuta las pruebas unitarias, simplemente agregue el nombre del ejecutable a la variable TESTS de la siguiente manera:
TESTS=my-test-executable
Entonces debería ejecutarse automáticamente cuando make check
, y si el ejecutable devuelve un valor distinto de cero, lo reportará como un error de prueba. Si tiene varios ejecutables de prueba unitaria, simplemente enumere todos en TESTS
variable:
TESTS=my-first-test my-second-test my-third-test
Y todos ellos serán ejecutados.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-06 22:57:35
Estoy usando Comprobar 0.9.10
configure.ac
Makefile.am
src/Makefile.am
src/foo.c
tests/check_foo.c
tests/Makefile.am
-
./configure.ac
PKG_CHECK_MODULES ([CHECK], [check >= 0.9.10])
-
./tests/Makefile.am
para los códigos de ensayoTESTS = check_foo check_PROGRAMS = check_foo check_foo_SOURCES = check_foo.c $(top_builddir)/src/foo.h check_foo_CFLAGS = @CHECK_CFLAGS@
-
Y escribir código de prueba,
./tests/check_foo.c
START_TEST (test_foo) { ck_assert( foo() == 0 ); ck_assert_int_eq( foo(), 0); } END_TEST /// And there are some tcase_xxx codes to run this test
Usando check puedes usar timeout y raise signal. es muy útil.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-29 02:07:34
Usted parece estar haciendo 2 preguntas en el primer párrafo.
La primera es acerca de agregar pruebas a la cadena de herramientas GNU autotools - pero esas pruebas, si lo entiendo correctamente, son tanto para validar que existe el entorno necesario para compilar su aplicación (bibliotecas y herramientas dependientes) como para adaptar la compilación al entorno (diferencias específicas de la plataforma).
El segundo es acerca de las pruebas unitarias de su aplicación C++ y dónde invocar esas pruebas, propuso hacerlo desde la cadena de herramientas autotools, presumiblemente desde el script configure. Sin embargo, hacer eso no es convencional - poner un objetivo 'test' en su Makefile es una forma más convencional de ejecutar su suite de pruebas. Los pasos típicos para compilar e instalar una aplicación con autotools (al menos desde la perspectiva de un usuario, no desde la perspectiva del desarrollador) es ejecutar el script configure, luego ejecutar make, luego opcionalmente ejecutar make test y finalmente make instalar.
Para el segundo problema, no querer que cppunit sea una dependencia, ¿por qué no distribuirla con su aplicación de c++? ¿Puedes simplemente ponerlo bien en cualquier formato de archivo que estés usando (ya sea tar.gz, tar.bz2 o .zip) junto con su código fuente. He utilizado cppunit en el pasado y estaba contento con él, después de haber utilizado JUnit y otros marcos de estilo xUnit.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-25 03:03:44
Puede usar el TESTS
de Automake para ejecutar programas generados con check_PROGRAMS
pero esto asumirá que está utilizando un controlador de registro y un compilador para la salida. Probablemente sea más fácil usar check_PROGRAMS
pero invocar el conjunto de pruebas usando una regla local en el Makefile:
check_PROGRAMS=testsuite
testsuite_SOURCES=...
testsuite_CFLAGS=...
testsuite_LDADD=...
check-local:
./testsuite
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-20 19:59:24