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 :

CppUnit et les threads


Sujet :

Autres éditeurs

  1. #1
    Membre du Club Avatar de zaphibel
    Homme Profil pro
    Ingénieur Logiciel
    Inscrit en
    Janvier 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 71
    Points : 57
    Points
    57
    Par défaut CppUnit et les threads
    Bonjour,
    CppUnit lance-t-il des threads en internes et de quel type sur
    windows ?
    Sinon éclairez moi Merci.

  2. #2
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Cela me suprendrait.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  3. #3
    Membre du Club Avatar de zaphibel
    Homme Profil pro
    Ingénieur Logiciel
    Inscrit en
    Janvier 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 71
    Points : 57
    Points
    57
    Par défaut
    bonjour,
    donc tu crois que tout est séquentiel?

  4. #4
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Citation Envoyé par zaphibel
    bonjour,
    donc tu crois que tout est séquentiel?
    Je pense que la méthode de base est séquentiel, comme avec Junit. Mais qu'il est possible de lancer de manière asynchrone des tests sur les classes (en effet, les lancements de tests sont protégés par des mutex (SynchronizedObject dans cppUnit))

    Pourquoi te demandez tu cela ?

    On ajoute un teste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void 
    TestRunner::addTest( Test *test )
    {
      m_suite->addTest( test ); 
    }
    On lance la batterie de test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void 
    TestRunner::run( TestResult &controller,
                     const std::string &testPath )
    {
      TestPath path = m_suite->resolveTestPath( testPath );
      Test *testToRun = path.getChildTest();
     
      controller.runTest( testToRun );
    }
    Le controlleur ne faisait qu'exécuter runTest du Test:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void 
    TestResult::runTest( Test *test )
    {
      startTestRun( test );
      test->run( this );
      endTestRun( test );
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void 
    TestCase::run( TestResult *result )
    {
      result->startTest(this);
     
    ...    result->protect( TestCaseMethodFunctor( this, &TestCase::runTest ),
                         this );
    Enfin, le TestResult fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void 
    TestResult::startTest( Test *test )
    { 
      ExclusiveZone zone( m_syncObject ); 
      for ( TestListeners::iterator it = m_listeners.begin();
            it != m_listeners.end(); 
            ++it )
        (*it)->startTest( test );
    }
    A ce moment, on voit apparaître un mutex qui laisse présager la possibilité de lancer des tests dans plusieurs threads.

    Après, j'avoue m'être à moitié paumé dans le code et j'ai eu la flemme de réflechir d'avantage
    Je ne répondrai à aucune question technique en privé

  5. #5
    Membre du Club Avatar de zaphibel
    Homme Profil pro
    Ingénieur Logiciel
    Inscrit en
    Janvier 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 71
    Points : 57
    Points
    57
    Par défaut
    Bonsoir,
    Tout d'abord Merci pour l'attention que tu as apporté à ma question.
    Ce code me permet d'éclaircir un gros problème lié à mes tests.
    Car j'utilise ACE (adaptive communication enviroment) et j'utillise
    des Mutex. Il se trouve que seul mon application qui utilse les
    mutex tourne parfaitement. Mais en l'integrant à des tests avec
    cppUnit il se trouve que mes Tasks (pour être précis employés
    par ACE) ne se lancent plus car ils n'ont jamais la main.
    Ce qu iaboutit à un crash sur un Mutex d'ACE de temps en temps.
    Il semblerait qu'il y ait un conflit de Mutex; L'emploi de plusieurs
    frameworks pourrait ne pas être compatible à ce que je vois.
    Naturellement ce n'est qu'une théorie pour l'instant qui demande
    à être vérifiée.
    Merci Arigato ^^

  6. #6
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Cela me parraitrait complètement idiot comme approche. Quid des nombreux codes non réentrants, ou des machines mono-proc. Il n'y a pas d'option pour empêcher cela ?

    Sinon, tu peux toujours te diriger vers des frameworks de TU plus complets, plus simples, et mieux foutus (cxxtest p.ex.)
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  7. #7
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Citation Envoyé par Luc Hermitte
    Sinon, tu peux toujours te diriger vers des frameworks de TU plus complets, plus simples, et mieux foutus (cxxtest p.ex.)
    EDIT : Désolé, j'avais lu cxxUnit, mais pas cxxTest. Cela dit, je vais laisser le message qui montre les limites de cxxUnit.


    J'avais utilisé cxxUnit dans un projet pour faire des tests unitaires, mais j'ai trouvé que cet outil avait des limites très importantes. Notamment lorsque l'on essayé de faire une architecture de test particulier (qui testent par exemple plusieurs implémentation d'une interface). Typiquement, dans un cas comme ça :

    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    /*interface*/
    class Interface {
     public: 
      virtual void methode() = 0;
      virtual ~Interface() {}
    };
     
    class Implementation1 : public Interface ...
    class Implementation2 : public Interface ...

    Les tests unitaires peuvent tester l'interface et s'écrivent sous la forme :

    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class TestInterface : public cxxUnit {
     public:
      virtual Interface * getInstance() = 0;
      void testMonPremierTest() { ....}
     
    };

    Classiquement, pour tester chaque implémentation, on faisait :
    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class TestImplementation1 : public TestInterface {
     public:
      Interface * getInstance() {
       return new Implementation1();
      }
    };

    Mais cxxUnit n'arrive pas du tout à gérer ces architectures En plus, il est nécessaire de disposer de Perl pour pouvoir précompiler les fichiers de tests (convertit un fichier de test en un fichier cpp).
    Je ne répondrai à aucune question technique en privé

  8. #8
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    CxxTest utilise bien perl. Et j'ai peur que le parser ne reconnaisse pas ce qu'il attend dans ce cas. Il faudrait que j'essaie pour voir.

    En jouant sur les makefile (pour linker avec un .o ou un autre, qui fourniront deux Interface* différents) il est possible de régler cela toutes fois.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  9. #9
    Membre du Club Avatar de zaphibel
    Homme Profil pro
    Ingénieur Logiciel
    Inscrit en
    Janvier 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 71
    Points : 57
    Points
    57
    Par défaut
    Bonjour,
    Il se trouve que les tests ont tous été fait avec cppUnit et je devais integrer
    mon travail dans leur suite de tests. En plus c'est très particulier puisque je le fais sur Windows. ACE signale quelques remarque concernant leur mutex sous windows. Et donc il y a forcément une autre définition de l'emploi des Mutex POSIX qui pourrait ne pas poser de problème. Du coup on compte peut être juste appelé mon appli de l'extérieur vérifier son résultat et pas l'intégrer dans la suite de tests.

Discussions similaires

  1. Aide sur les Threads
    Par themoye dans le forum MFC
    Réponses: 24
    Dernier message: 06/03/2005, 15h02
  2. Les Threads... J'en remet une couche :)
    Par Higestromm dans le forum C++
    Réponses: 5
    Dernier message: 17/11/2004, 12h19
  3. Gestion des message windows dans les threads
    Par billyboy dans le forum Windows
    Réponses: 5
    Dernier message: 06/10/2003, 17h25
  4. Question simple sur les threads :)
    Par momox dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/06/2003, 04h13
  5. question sur les variables globales et les thread posix
    Par souris_sonic dans le forum POSIX
    Réponses: 5
    Dernier message: 13/06/2003, 13h59

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