Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 6 sur 6
  1. #1
    Nouveau Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    septembre 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : septembre 2011
    Messages : 30
    Points : 34
    Points
    34

    Par défaut [Question] [CPPUNIT] Séparation des Tests Unitaires

    Bonjour,
    Je suis en étude en informatique et durant mon premier stage on me demande d'utiliser CPPUNIT pour tout ce qui Test Unitaire.
    Après une bonne documentation et une mise en pratique je me suis vite fait a cette outils de test.
    Travaillant sur un gros projet avec mon entreprise, nous avons une grosse quantité de test et notre main de test, ne nous permettait pas de lancer les Classes de test indépendamment des autres ce qui a force de rajouter des classes tests, pour vérifier juste une partie du code d'une classe on devait se taper tout les Test Unitaire des autres....
    Après quelques recherches j'ai pu améliorer le main de test avec le system que nous avions avec CPPUNIT.

    Il fallait simplement utiliser :
    CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( ATestFixtureType, Name )
    Au lieu de :
    CPPUNIT_TEST_SUITE_REGISTRATION( ATestFixtureType )

    Pour que l'on puisse retrouver le nom des classes de test dans le registre de CPPUNIT pour les exécuter. (en changeant un peu le main on peut donc tester en prenant en argument le nom de la classe que l'on souhaite tester et si aucun argument n'est donné au main faire tout les tests qui existe ce qui donne fait gagner pas mal de temps par jours ^^).

    Après cette amélioration, on me demande de rechercher s'il est possible d'exécuter uniquement une méthodes d'une classe de test indépendamment des autres méthodes de la même classe et autres classes. J'ai pas mal rechercher sur google, sur toute la doc et tout les .h de CPPUNIT, mais je n'ai rien trouvé a ce propos, si une personne bien calé en CPPUNIT pourrait m'aider pour au moins me dire si cela est possible.

    Je suis présent pour toute information supplémentaire que vous avez besoin.
    Merci

  2. #2
    Membre Expert
    Inscrit en
    mars 2005
    Messages
    865
    Détails du profil
    Informations forums :
    Inscription : mars 2005
    Messages : 865
    Points : 1 060
    Points
    1 060

    Par défaut

    Oui, tu peux exécuter juste un test. Dans ton main, tu dois faire quelque chose comme

    Code :
    1
    2
    3
    4
    5
     
      CPPUNIT_NS::TextTestRunner runner;
      CPPUNIT_NS::Test *suite = CPPUNIT_NS::TestFactoryRegistry::getRegistry().makeTest();
      runner.addTest (suite);
      bool success = runner.run (testName);
    De souvenir, il suffit de remplacer testName par nom_de_la_class::nom_de_la_methode. A moins que ce ne soit un point à la place de ::

    Par contre, je n'utilise pas CPPUNIT_TEST_SUITE_NAMED_REGISTRATION.

  3. #3
    Nouveau Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    septembre 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : septembre 2011
    Messages : 30
    Points : 34
    Points
    34

    Par défaut

    J'avais déjà fait cette petite partie qui marche très bien mais j'utilise aussi :
    CPPUNIT_NS::TestResult controller;
    CPPUNIT_NS::TestResultCollector result;
    controller.addListener(&result);
    CPPUNIT_NS::XmlOutputter xmlOut(&result, xmlFileOut);
    Pour pouvoir stocker les résultats des ASSERT et après écrire dans un fichier sous format xml les résultats...
    Dans ta situation cela marche mais je n'arrive pas a stocker mes résultat dans mon controller.

  4. #4
    Nouveau Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    septembre 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : septembre 2011
    Messages : 30
    Points : 34
    Points
    34

    Par défaut

    Donc voila ce que j'ai trouve comme solution... mais comme vous le voyez c'est un peux gros xD.. et pas super beau... mais je peu stocker tout mes résultats comme ceci dans un result...

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
           CPPUNIT_NS::TestResult controller;
           CPPUNIT_NS::TestResultCollector result;
           controller.addListener(&result);
            if (argc > 1)
                std::string testClasseName = argv[1];
            if (argc > 2)
                std::string testMethodeName = argv[2];
            CPPUNIT_NS::TestSuite testSuite;
            testSuite.addTest(CPPUNIT_NS::TestFactoryRegistry::getRegistry().makeTest());
     
            uint32_t nbTest = testSuite.getChildTestCount();
            for (uint32_t index_T = 0; index_T < nbTest; index_T++)
            {
                if (argc != 2 && argc != 3)
                {
                    testSuite.doGetChildTestAt(index_T)->run(&controller);
                }
                else
                {
                    uint32_t nbClasseTest = testSuite.doGetChildTestAt(index_T)->getChildTestCount();
                    for (uint32_t index_C = 0; index_C < nbClasseTest; index_C++)
                    {
                        if (argc != 3)
                        {
                            if (testSuite.doGetChildTestAt(index_T)->getChildTestAt(index_C)->getName() == testClasseName)
                            {
                                testSuite.doGetChildTestAt(index_T)->getChildTestAt(index_C)->run(&controller);
                            }
                        }
                        else
                        {
                            uint32_t nbMethodeTest = testSuite.doGetChildTestAt(index_T)->getChildTestAt(index_C)->getChildTestCount();
                            for (uint32_t index_M = 0; index_M < nbMethodeTest; index_M++)
                            {
                                if (testSuite.doGetChildTestAt(index_T)->getChildTestAt(index_C)->getChildTestAt(index_M)->getName() == testMethodeName)
                                {
                                    testSuite.doGetChildTestAt(index_T)->getChildTestAt(index_C)->getChildTestAt(index_M)->run(&controller);
                                }
                            }
                        }
                    }
                }
            }
    Donc si vous trouvez quelques choses de mieux je suis preneur

  5. #5
    Membre Expert
    Inscrit en
    mars 2005
    Messages
    865
    Détails du profil
    Informations forums :
    Inscription : mars 2005
    Messages : 865
    Points : 1 060
    Points
    1 060

    Par défaut

    Effectivement, ça devient vite compliqué. C'est sûrement la raison pour laquelle j'ai abandonné CppUnit. J'utilise maintenant GoogleTests qui, au passage, permet de produire un fichier au format XML (plus précisèment xUnit).

  6. #6
    Nouveau Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    septembre 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : septembre 2011
    Messages : 30
    Points : 34
    Points
    34

    Par défaut

    Je testerai xUnit personnellement merci pour vos réponses qui si plus performant que CPPUNIT et plus simple je pense que j'adopterais pour mes projets perso. J'utiliserais ma partie du code qui marche si personne a de meilleurs idées pour rendre le code plus propre...

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •