22

Estoy usando GNU autotools para el sistema de compilación en un proyecto en particular. Quiero comenzar a escribir pruebas automatizadas para la verificación. Me gustaría simplemente escribir "make check" para que los ejecute automáticamente. Mi proyecto está en C++, aunque todavía tengo curiosidad por escribir pruebas automatizadas para otros idiomas.¿Cómo se crean pruebas para "hacer cheque" con GNU autotools

¿Es esto compatible con casi todos los marcos de pruebas de unidades que hay (estaba pensando en usar cppunit)? ¿Cómo engancho estos marcos de prueba de unidad en make check? ¿Puedo asegurarme de que no requiera que se instale el software de prueba de la unidad para poder configurar y construir el resto del proyecto?

Respuesta

21

Para hacer prueba de funcionamiento cuando se emite make check, es necesario añadirlos a la variable de TESTS

Suponiendo que ya haya creado el ejecutable que ejecuta las pruebas unitarias, que acaba de añadir el nombre del ejecutable a la pRUEBAS variable de la siguiente manera:

TESTS=my-test-executable 

a continuación, se debe ejecutar automáticamente cuando se make check, y si el ejecutable devuelve un valor distinto de cero, se informará de que como un fallo de la prueba. Si tiene varios archivos ejecutables de los exámenes de unidad, simplemente lista de todos ellos en la variable TESTS:

TESTS=my-first-test my-second-test my-third-test 

y todos ellos se consiguen ejecutar.

+1

es posible que también desee utilizar la variable TESTS_ENVIRONMENT si necesita ajustar el entorno en el que se ejecutarán las pruebas, por ejemplo PATH. – tmatth

4

Parece que hace 2 preguntas en el primer párrafo.

La primera se trata de agregar pruebas a la cadena de herramientas GNU autotools, pero esas pruebas, si lo entiendo correctamente, son para validar que existe el entorno necesario para construir su aplicación (bibliotecas y herramientas dependientes) y adaptar la construcción al entorno (diferencias específicas de la plataforma).

El segundo es sobre la prueba unitaria de su aplicación C++ y dónde invocar esas pruebas, ha propuesto hacerlo desde la cadena de herramientas autotools, presumiblemente desde el script de configuración. Sin embargo, hacerlo no es convencional: colocar un objetivo de 'prueba' en su Makefile es una forma más convencional de ejecutar su suite de pruebas. Los pasos típicos para construir e instalar una aplicación con autotools (al menos desde la perspectiva del usuario, no desde su perspectiva del desarrollador) es ejecutar la secuencia de comandos de configuración, ejecutar make y luego ejecutar make test y finalmente make install.

Para la segunda cuestión, no queriendo que cppunit sea una dependencia, ¿por qué no simplemente distribuirlo con su aplicación C++? ¿Puedes ponerlo justo en el formato de archivo que estés usando (ya sea tar.gz, tar.bz2 o .zip) junto con tu código fuente? He usado cppunit en el pasado y estaba contento con él, después de haber usado JUnit y otros frameworks de estilo xUnit.

+0

ninguna información sobre el voto hacia abajo? ¿Sintió que la pregunta no fue dirigida directamente? –

8

estoy usando Check 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 ([VER], [comprobar> = 0,9.10])

  2. ./tests/Makefile.am de códigos de prueba

    TESTS = check_foo 
    check_PROGRAMS = check_foo 
    check_foo_SOURCES = check_foo.c $(top_builddir)/src/foo.h 
    check_foo_CFLAGS = @[email protected] 
    
  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 comprobar que se puede utilizar el tiempo de espera y aumentar la señal. es de mucha ayuda.

0

Puede usar Automake's TESTS para ejecutar programas generados con check_PROGRAMS pero supondrá que está utilizando un controlador de registro y un compilador para la salida. Es probablemente más fácil de seguir utilizando check_PROGRAMS pero para invocar el conjunto de pruebas utilizando una regla local en el Makefile:

check_PROGRAMS=testsuite 

testsuite_SOURCES=... 
testsuite_CFLAGS=... 
testsuite_LDADD=... 

check-local: 
    ./testsuite 
Cuestiones relacionadas