Précédent   Forum du club des développeurs et IT Pro > C et C++ > Outils pour C & C++ > Autres
Autres Vos questions sur les autres EDI ou éditeurs : Emacs, Vim, Kdevelop, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 20/09/2011, 16h33   #1
darkhades
Nouveau Membre du Club
 
Homme
Développeur informatique
Inscription : 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
darkhades est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2011, 21h13   #2
aoyou
Membre émérite
 
Inscription : mars 2005
Messages : 860
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 860
Points : 964
Points : 964
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.
aoyou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2011, 10h04   #3
darkhades
Nouveau Membre du Club
 
Homme
Développeur informatique
Inscription : 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
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.
darkhades est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2011, 10h28   #4
darkhades
Nouveau Membre du Club
 
Homme
Développeur informatique
Inscription : 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
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
darkhades est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2011, 22h07   #5
aoyou
Membre émérite
 
Inscription : mars 2005
Messages : 860
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 860
Points : 964
Points : 964
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).
aoyou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 09h56   #6
darkhades
Nouveau Membre du Club
 
Homme
Développeur informatique
Inscription : 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
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...
darkhades est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 18h13.


 
 
 
 
Partenaires

Hébergement Web