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?

Author: Greg Rogers, 2008-09-25

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.

 22
Author: jonner,
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
  1. ./configure.ac

    PKG_CHECK_MODULES ([CHECK], [check >= 0.9.10])

  2. ./tests/Makefile.am para los códigos de ensayo

    TESTS = check_foo
    check_PROGRAMS = check_foo
    check_foo_SOURCES = check_foo.c $(top_builddir)/src/foo.h
    check_foo_CFLAGS = @CHECK_CFLAGS@
    
  3. 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.

 8
Author: Dongho Yoo,
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.

 4
Author: Kyle Burton,
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
 0
Author: wedesoft,
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