Comment créer des tests pour "make check" avec GNU autotools

J'utilise GNU autotools pour le système de construction sur un projet particulier. Je veux commencer à écrire des tests automatisés pour la vérification. Je voudrais juste taper "faire vérifier" pour qu'il exécute automatiquement ces derniers. Mon projet est en C++, même si je suis toujours curieux d'écrire des tests automatisés pour d'autres langues.

est-ce compatible avec à peu près tous les cadres de test unitaires là-bas (je pensais utiliser cppunit)? Comment puis-je connecter ces unités de test cadres en faire la vérification? Puis-je m'assurer que je n'ai pas besoin que le logiciel de test de l'unité soit installé pour pouvoir configurer et construire le reste du projet?

23
demandé sur Greg Rogers 2008-09-25 04:30:36

4 réponses

Pour effectuer des tests d'exécuter lorsque vous émettez make check, vous devez les ajouter à l' TESTS variable

en supposant que vous avez déjà construit l'exécutable qui exécute les tests unitaires, vous ajoutez juste le nom de l'exécutable à la variable de TESTS comme ceci:

TESTS=my-test-executable

il devrait alors être exécuté automatiquement lorsque vous make check, et si l'exécutable renvoie une valeur non nulle, il signale que comme un échec de test. Si vous avez plusieurs exécutables de test d'unité, il suffit de les énumérer tous dans le TESTS la variable:

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

et ils vont tous se faire rouler.

22
répondu jonner 2008-10-06 22:57:35

j'utilise Vérifier 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 ([], [>= 0.9.10])

  2. ./tests/Makefile.am pour les codes d'essai

    TESTS = check_foo
    check_PROGRAMS = check_foo
    check_foo_SOURCES = check_foo.c $(top_builddir)/src/foo.h
    check_foo_CFLAGS = @CHECK_CFLAGS@
    
  3. et test d'écriture de code, ./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
    

en utilisant check vous pouvez utiliser timeout et raise signal. il est très utile.

8
répondu Dongho Yoo 2013-11-29 02:07:34

vous semblez poser 2 questions dans le premier paragraphe.

la première consiste à ajouter des tests à la chaîne D'outils GNU autotools - mais ces tests, si je vous comprends bien, sont à la fois pour valider que l'environnement nécessaire pour construire votre application existe (bibliothèques dépendantes et outils) et pour adapter la construction à l'environnement (différences spécifiques à la plate-forme).

le second concerne l'unité testant votre application C++ et où les invoquer tests, vous avez proposé de le faire à partir de la chaîne d'outils autotools, probablement à partir du script configure. Faire cela n'est pas conventionnel - mettre une cible 'test' dans votre Makefile est une façon plus conventionnelle d'exécuter votre suite de test. Les étapes typiques pour construire et installer une application avec autotools (au moins du point de vue d'un utilisateur, pas du point de vue de votre développeur) est d'exécuter le script configure, puis exécuter make, puis éventuellement exécuter make test et enfin make installer.

pour le second numéro, ne voulant pas que cppunit soit une dépendance, pourquoi ne pas simplement le distribuer avec votre application c++? Pouvez-vous simplement le mettre dans le format d'archive que vous utilisez (que ce soit tar.gz, tar.bz2 ou .zip) avec votre code source. J'ai utilisé CppUnit dans le passé et j'étais heureux avec, ayant utilisé JUnit et d'autres cadres de style xUnit.

4
répondu Kyle Burton 2008-09-25 03:03:44

Vous pouvez utiliser Automake TESTS pour exécuter des programmes générés par check_PROGRAMS mais cela suppose que vous utilisez un journal pilote et un compilateur pour la sortie. Il est probablement plus facile de toujours utiliser check_PROGRAMS mais pour invoquer la suite de test en utilisant une règle locale dans le Makefile:

check_PROGRAMS=testsuite

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

check-local:
    ./testsuite
0
répondu wedesoft 2017-10-20 19:59:24