IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Autres éditeurs Discussion :

[Question] [CPPUNIT] Séparation des Tests Unitaires


Sujet :

Autres éditeurs

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2011
    Messages : 35
    Points : 47
    Points
    47
    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 éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Points : 1 069
    Points
    1 069
    Par défaut
    Oui, tu peux exécuter juste un test. Dans ton main, tu dois faire quelque chose comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2011
    Messages : 35
    Points : 47
    Points
    47
    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
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2011
    Messages : 35
    Points : 47
    Points
    47
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Points : 1 069
    Points
    1 069
    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
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2011
    Messages : 35
    Points : 47
    Points
    47
    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...

Discussions similaires

  1. Réponses: 0
    Dernier message: 16/06/2009, 11h41
  2. Combien d'entreprises utilisent des tests unitaires
    Par hugobosscool26 dans le forum C#
    Réponses: 6
    Dernier message: 04/11/2008, 20h47
  3. [MStest] Résultat des tests unitaires dans le XML
    Par loic_86 dans le forum Visual Studio
    Réponses: 1
    Dernier message: 08/03/2007, 14h32
  4. [Test][VS2005] Mise en place des tests unitaires
    Par Dadou74 dans le forum Test
    Réponses: 1
    Dernier message: 31/08/2006, 17h45
  5. [Outils] Quelle stratégie pour des tests unitaires BDD
    Par hecatonchire dans le forum Décisions SGBD
    Réponses: 6
    Dernier message: 21/04/2006, 10h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo