Forum Programmation.c Qu'utilisez-vous pour vos tests en C ?

Posté par . Licence CC by-sa
Tags : aucun
2
12
mar.
2015

Bonjour.

Je me remets un peu au C en ce moment (une petite idée qui me trotte dans la tête depuis un moment), et je voulais profiter de l'occasion pour savoir quels outils vous utilisez pour réaliser vos test : tests unitaires, tests d'intégration, etc… Je vous sauraigrén, si dans vos réponses vous indiquiez pourquoi vous avez choisi cet outil, ce que vous aimez, ce que vous n'aimez pas, le contexte dans lequel vous l'utilisez, les contraintes, … enfin un retour d'expérience, un petit plus par rapport à ce que la page web du projet pourrait indiquer. Et si certains font des propositions que vous avez écartées je suis également intéressé de savoir pourquoi.

Je vous remercie d'avance pour votre retour.

  • # agnostique

    Posté par . Évalué à 0.

    Un des avantages du C, c'est que ça s'intègre relativement facilement dans à peu près n'importe quelle pile technologique. Du coup, j'aurais tendance à choisir l'infrastructure de test d'abord. Perso, je n'ai pas eu les moyens de pousser la question autant que j'aurais aimé, mais j'avais testé sur une base de l'infra de tests de libboost en C++ (je n'ai aucun goût pour le C++, et je n'aimerais pas coder sur un projet exclusivement en C++, mais sur de l'infra de test, ça va très bien), et testé aussi sur du Python en ctypes. On peut aussi wrapper vers du java en JNI mais, à mon avis, c'est un chouille plus galère.
    Dans tous les cas, ça implique probablement d'ajouter pas mal de helpers dans le code, et donc prévoir des options de compils test/prod (rien que pour tester les fonctions non exportées par exemple). Pour faire de l'intégration continue, faudra aussi expliquer à l'outil comment compiler le code. Du coup, pour évite de recompiler tout à chaque test, il vaut mieux avoir une compilation aussi modulaire que le code lui même.

    Dans tous les cas, je déconseille l'écrite d'un framework perso. ça serait dommage de se priver de tout ce qui existe dans le domaine de l'intégration continue (récup des sources, build, lancement auto des campagnes de test, collecte des résultats, …)

    Bon désolé, c'est pas une réflexion très approfondie, mais c'est peut-être quelques pistes. En tout cas, si tu arrives à un truc qui te plait, ça m'intéresse d'avoir un retour.

  • # Catch

    Posté par (page perso) . Évalué à 5. Dernière modification le 13/03/15 à 09:05.

    Pour des tests en C, j'utiliserais du C++ :)

    L'avantage, c'est que ça permet de faire des choses assezs utile pour avoir un code de tests simple. Les bonnes libs de tests permettront de surcharger les opérateurs et récupérer les valeurs testées au lieu de sortir un bête booléen true/false par exemple. Comme lib de test, je te propose Catch qui ne fonctionne justement pas avec des classes, mais permet de déclarer des tests case comme des fonctions. Par exemple :

        TEST_CASE( "Factorials are computed", "[factorial]" ) {
            REQUIRE( Factorial(0) == 1 );
            REQUIRE( Factorial(1) == 1 );
            REQUIRE( Factorial(2) == 2 );
            REQUIRE( Factorial(3) == 6 );
            REQUIRE( Factorial(10) == 3628800 );
        }

    Et il y a plein d'autres trucs cools. En particulier l'installation est super simple.

    Voir les articles de blog :

    (le dernier parle également d'autres libs de tests)

  • # CMake & CTest

    Posté par . Évalué à 2.

    J'ai juste eu l'occasion d'utiliser CTest à une ou deux occasions, mais mon choix s'orienterait vers lui.

    CTest est un outil qui vient avec CMake, et CMake, c'est juste la vie.

    Plus d'infos : http://www.cmake.org/Wiki/CMake/Testing_With_CTest

  • # cxxtest

    Posté par . Évalué à 2.

    Pour les tests unitaires, j'utilise cxxtest http://cxxtest.com
    C'est prévu pour le C++ mais tu peux l'utiliser très facilement pour tester du C.

    Je l'ai choisi car:

    • il très facile à utiliser.
    • il est facile à installer. (via les dépots, ou à la main)
    • il est portable. C'est un programme python qui fonctionne sous Linux, BSD, Windows, MacOSX
    • il est facile à intégrer dans ton système de construction

    La documentation est ici: http://cxxtest.com/guide.html
    Tu lis tranquillement la documentation et 20 minutes plus tard tu es opérationnel.

  • # libtap13

    Posté par . Évalué à 1.

    J'utilise libtap13, une bibliothèque minimaliste inspirée du module Perl Test::More que j'ai développée pour mes propres besoins.
    Le code produit une sortie TAP, il faut donc un outil tel que prove pour lancer les tests.
    Voici un exemple d'utilisation: https://github.com/jajm/libtap13/blob/master/examples/basic_usage.t.c

    Elle dépend de LibYAML (voir TAP13 pour comprendre pourquoi).

    Pour la doc, voir le fichier tap.h

  • # CUnit ?

    Posté par . Évalué à 3.

    Je suis assez surpris de ne pas voir CUnit mentionné, donc je m'en charge.
    Nous on s'en sert pour les tests unitaires de Linphone, et faut avouer que ça fait le job.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.