with tutorial the para latest framework español applications unit-testing language-agnostic automated-tests autotools

unit testing - tutorial - ¿Cómo se crean pruebas para "verificar" con las herramientas automáticas de GNU?



the django project (4)

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.

¿Es esto compatible con prácticamente todos los frameworks de pruebas de unidades (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?


Parece que estás haciendo 2 preguntas en el primer párrafo.

La primera se trata de agregar pruebas a la cadena de herramientas autotools de GNU, 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 para adaptar la compilación a el medio ambiente (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 el segundo problema, no queriendo que cppunit sea una dependencia, ¿por qué no simplemente distribuirlo con su aplicación de 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.


Para hacer que la prueba se ejecute cuando emite make check , debe agregarlos a la variable TESTS

Suponiendo que ya ha creado 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

Debería ejecutarse automáticamente cuando make check , y si el ejecutable devuelve un valor distinto de cero, lo informará como una falla de prueba. Si tiene varios archivos ejecutables de prueba unitarios, simplemente haga una lista de todos ellos en la variable TESTS :

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

y todos se ejecutarán.


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 ([CHECK], [check> = 0.9.10])

  2. ./tests/Makefile.am para 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 = @CHECK_CFLAGS@

  3. y escribir el 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 el control, puede usar el tiempo de espera y la señal de aumento. es de mucha ayuda.


Puede usar las TESTS de Automake para ejecutar programas generados con check_PROGRAMS pero supondrá que está utilizando un controlador de registro y un compilador para la salida. Probablemente sea más fácil aún 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