Question

J'utilise les outils automatiques GNU pour le système de construction d'un projet particulier. Je veux commencer à écrire des tests automatisés pour la vérification. J'aimerais simplement taper "make check". de le faire fonctionner automatiquement. 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 frameworks de tests unitaires (je pensais utiliser cppunit)? Comment puis-je intégrer ces frameworks de tests unitaires dans make check? Puis-je m'assurer que je n'ai pas besoin du logiciel de test unitaire pour pouvoir configurer et construire le reste du projet?

Était-ce utile?

La solution

Pour que le test soit exécuté lorsque vous exécutez make check , vous devez les ajouter à la variable TESTS

.

En supposant que vous ayez déjà créé l'exécutable qui exécute les tests unitaires, il vous suffit d'ajouter le nom de l'exécutable à la variable TESTS comme ceci:

TESTS=my-test-executable

Il devrait ensuite être exécuté automatiquement lorsque vous vérifiez , et si l'exécutable renvoie une valeur non nulle, il le signalera comme un échec de test. Si vous avez plusieurs exécutables de test d'unité, il suffit de les lister dans la variable TESTS :

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

et ils seront tous courus.

Autres conseils

J'utilise 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 pour les codes de test

    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 écrivez le code de test, ./ 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 le délai d’attente et augmenter le signal. c'est très utile.

Vous semblez poser 2 questions dans le premier paragraphe.

La première concerne l’ajout de tests à la chaîne d’outils des outils automatiques GNU - mais ces tests, si je vous comprends bien, servent à la fois à vérifier que l’environnement nécessaire à la construction de votre application existe (bibliothèques et outils dépendants) et à adapter. la construction à l'environnement (différences spécifiques à la plate-forme).

La seconde concerne les tests unitaires de votre application C ++ et l'endroit où vous invoquer ces tests. Vous avez proposé de le faire à partir de la chaîne d'outils autotools, probablement à partir du script configure. Faire cela n’est cependant pas conventionnel: placer une cible 'test' dans votre Makefile est un moyen plus conventionnel d’exécuter votre suite de tests. Les étapes typiques pour la construction et l’installation d’une application avec autotools (du moins du point de vue de l’utilisateur, et non de votre perspective de développeur) consistent à exécuter le script configure, puis à exécuter make, puis éventuellement à exécuter make test et enfin à make install. / p>

Pour le deuxième problème, ne voulant pas que cppunit soit une dépendance, pourquoi ne pas simplement le distribuer avec votre application c ++? Pouvez-vous simplement préciser le format d'archive que vous utilisez (tar.gz, tar.bz2 ou .zip) ainsi que votre code source. J’ai utilisé cppunit par le passé et j’en étais satisfait, ayant utilisé JUnit et d’autres frameworks de style xUnit.

Vous pouvez utiliser le TESTS d'Automake pour exécuter les programmes générés avec check_PROGRAMS , mais cela supposera que vous utilisez un pilote de journal et un compilateur pour la sortie. Il est probablement plus facile de continuer à utiliser check_PROGRAMS , mais d'appeler la suite de tests à l'aide d'une règle locale dans le Makefile:

check_PROGRAMS=testsuite

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

check-local:
    ./testsuite
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top