Pregunta

Estoy usando las herramientas automáticas GNU 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 "hacer cheque" para que se ejecute automáticamente. Mi proyecto está en C ++, aunque todavía tengo curiosidad por escribir pruebas automatizadas para otros idiomas también.

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

¿Fue útil?

Solución

Para ejecutar la prueba cuando emite make check , debe agregarlos a la variable TESTS

Suponiendo que ya ha creado el ejecutable que ejecuta las pruebas unitarias, simplemente agrega el nombre del ejecutable a la variable TESTS de esta manera:

TESTS=my-test-executable

Debería ejecutarse automáticamente cuando realiza la verificación , y si el ejecutable devuelve un valor distinto de cero, informará que se trata de un error de prueba. Si tiene múltiples ejecutables de prueba unitaria, simplemente enumere todos en la variable TESTS :

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

y todos se ejecutarán.

Otros consejos

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 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 escriba 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 la verificación puede usar el tiempo de espera y aumentar la señal. es muy útil.

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

El primero se trata de agregar pruebas a la cadena de herramientas de herramientas automáticas GNU, pero esas pruebas, si te entiendo correctamente, son para validar que existe el entorno necesario para construir tu aplicación (bibliotecas y herramientas dependientes), así como para adaptar la construcción del 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, usted ha propuesto hacerlo desde la cadena de herramientas de herramientas automáticas, presumiblemente desde el script de configuración. Sin embargo, hacer eso no es convencional: poner un objetivo de 'prueba' en su Makefile es una forma más convencional de ejecutar su conjunto de pruebas. Los pasos típicos para crear e instalar una aplicación con herramientas automáticas (al menos desde la perspectiva del usuario, no desde la perspectiva del desarrollador) es ejecutar el script de configuración, luego ejecutar make, luego opcionalmente ejecutar make test y finalmente realizar la instalación.

Para el segundo problema, no querer que cppunit sea una dependencia, ¿por qué no simplemente distribuirlo con su aplicación c ++? ¿Puede ponerlo en cualquier formato de archivo que esté usando (ya sea tar.gz, tar.bz2 o .zip) junto con su código fuente. He usado cppunit en el pasado y estaba contento con él, después de haber usado JUnit y otros marcos de estilo xUnit.

Puede usar TESTS de Automake para ejecutar programas generados con check_PROGRAMS pero esto supondrá que está utilizando un controlador de registro y un compilador para la salida. Probablemente sea más fácil seguir usando 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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top