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

C++ Discussion :

test methode privée


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 80
    Par défaut test methode privée
    bonjour a tous,
    je cherche un moyen de teste des fonctions privée, je précise bien que je ne veux pas savoir si c'est bien ou pas je souhaite uniquement savoir comment faire, et quelle sont les solution qui s'offre a moi,
    sachant que mon code et du c++ et que j'utilise google test pour effectuer mes test

    j'ai déjà essayer la solution suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    https://github.com/google/googletest/blob/master/googletest/docs/AdvancedGuide.md#private-class-members
    mais ca ne marche pas visiblement

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Et pourtant c'est la méthode la plus simple : il faut déclarer une classe amie, ta classe de test.

    Si ça ne fonctionne pas, c'est que tu n'as pas dû implémenté ça comme il faut. Mais pour le savoir il nous faut voir ton code

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par défaut
    Tu ne peux accéder à une méthode privée qu'en étant toi-même la classe ou friend. Perso j'opte pour le friend pour mes simples tests.
    Un autre hack serait un #define private public avant d'inclure la déclaration de la classe, mais c'est un hack.

    Tu as essayé quoi ? Où est le code ? Tout ce que tu indiques est une doc sûrement valide, pour peu qu'on la suive correctement.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 80
    Par défaut
    voici mon code
    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
     
    EvaluateController.h
    #include "gtest/gtest_prod.h"
     
     
    class EvaluateController {
        friend class EvaluateControllerTest;
     
    private:
        FRIEND_TEST(EvaluateControllerTest, calculateMeanTest);
        float calculateMean(list<float> measure);
     
    };
     
    EvaluateController.cc
     
    namespace{
    	class EvaluateControllerTest : public :: testing::Test{
     
    TEST_F(EvaluateControllerTest, calculateMeanTest){
        EvaluateController* evaluateController = EvaluateController::getInstance();
        list<float> measure;
        measure.push_back(9);
        EXPECT_EQ(evaluateController->calculateMean(measure),9);
    }
    et quand j'execute le code voici ce qui les erreur
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    In file included from /home/charles/Desktop/Westguard-SSM/src/test/EvaluateControllerTest.cc:9:0:
    /home/charles/Desktop/Westguard-SSM/src/test/../Controller/EvaluateController.h: In member function ‘float {anonymous}::EvaluateControllerTest::calculateMean(std::__cxx11::list<float>)’:
    /home/charles/Desktop/Westguard-SSM/src/test/../Controller/EvaluateController.h:50:11: error: ‘float EvaluateController::calculateMean(std::__cxx11::list<float>)’ is private
         float calculateMean(list<float> measure);
               ^
    /home/charles/Desktop/Westguard-SSM/src/test/EvaluateControllerTest.cc:25:90: error: within this context
             float calculateMean(list<float> measure){return controller->calculateMean(measure);}
                                                                                              ^
    In file included from /home/charles/Desktop/Westguard-SSM/src/test/EvaluateControllerTest.cc:9:0:
    /home/charles/Desktop/Westguard-SSM/src/test/../Controller/EvaluateController.h: In member function ‘virtual void {anonymous}::EvaluateControllerTest_calculateMeanTest_Test::TestBody()’:
    /home/charles/Desktop/Westguard-SSM/src/test/../Controller/EvaluateController.h:50:11: error: ‘float EvaluateController::calculateMean(std::__cxx11::list<float>)’ is private
         float calculateMean(list<float> measure);
               ^
    In file included from /home/charles/Desktop/Westguard-SSM/third_parties/googletest/include/gtest/gtest.h:1874:0,
                     from /home/charles/Desktop/Westguard-SSM/src/test/EvaluateControllerTest.cc:8:
    /home/charles/Desktop/Westguard-SSM/third_parties/googletest/include/gtest/gtest.h:1923:25: error: within this context
       EXPECT_PRED_FORMAT2(::testing::internal:: \
                             ^
    /home/charles/Desktop/Westguard-SSM/third_parties/googletest/include/gtest/gtest_pred_impl.h:77:52: note: in definition of macro ‘GTEST_ASSERT_’
       if (const ::testing::AssertionResult gtest_ar = (expression)) \
                                                        ^
    /home/charles/Desktop/Westguard-SSM/third_parties/googletest/include/gtest/gtest_pred_impl.h:162:3: note: in expansion of macro ‘GTEST_PRED_FORMAT2_’
       GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_NONFATAL_FAILURE_)
       ^
    /home/charles/Desktop/Westguard-SSM/third_parties/googletest/include/gtest/gtest.h:1923:3: note: in expansion of macro ‘EXPECT_PRED_FORMAT2’
       EXPECT_PRED_FORMAT2(::testing::internal:: \
       ^
    /home/charles/Desktop/Westguard-SSM/src/test/EvaluateControllerTest.cc:1006:5: note: in expansion of macro ‘EXPECT_EQ’
         EXPECT_EQ(evaluateController->calculateMean(measure),9);
         ^
    In file included from /home/charles/Desktop/Westguard-SSM/src/test/EvaluateControllerTest.cc:9:0:
    /home/charles/Desktop/Westguard-SSM/src/test/../Controller/EvaluateController.h:50:11: error: ‘float EvaluateController::calculateMean(std::__cxx11::list<float>)’ is private
         float calculateMean(list<float> measure);
               ^
    In file included from /home/charles/Desktop/Westguard-SSM/third_parties/googletest/include/gtest/gtest.h:1874:0,
                     from /home/charles/Desktop/Westguard-SSM/src/test/EvaluateControllerTest.cc:8:
    /home/charles/Desktop/Westguard-SSM/src/test/EvaluateControllerTest.cc:1006:56: error: within this context
         EXPECT_EQ(evaluateController->calculateMean(measure),9);
                                                            ^
    /home/charles/Desktop/Westguard-SSM/third_parties/googletest/include/gtest/gtest_pred_impl.h:77:52: note: in definition of macro ‘GTEST_ASSERT_’
       if (const ::testing::AssertionResult gtest_ar = (expression)) \
                                                        ^
    /home/charles/Desktop/Westguard-SSM/third_parties/googletest/include/gtest/gtest_pred_impl.h:162:3: note: in expansion of macro ‘GTEST_PRED_FORMAT2_’
       GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_NONFATAL_FAILURE_)
       ^
    /home/charles/Desktop/Westguard-SSM/third_parties/googletest/include/gtest/gtest.h:1923:3: note: in expansion of macro ‘EXPECT_PRED_FORMAT2’
       EXPECT_PRED_FORMAT2(::testing::internal:: \
       ^
    /home/charles/Desktop/Westguard-SSM/src/test/EvaluateControllerTest.cc:1006:5: note: in expansion of macro ‘EXPECT_EQ’
         EXPECT_EQ(evaluateController->calculateMean(measure),9);
         ^
    src/test/CMakeFiles/Test.dir/build.make:62: recipe for target 'src/test/CMakeFiles/Test.dir/EvaluateControllerTest.cc.o' failed
    make[3]: *** [src/test/CMakeFiles/Test.dir/EvaluateControllerTest.cc.o] Error 1
    CMakeFiles/Makefile2:469: recipe for target 'src/test/CMakeFiles/Test.dir/all' failed
    make[2]: *** [src/test/CMakeFiles/Test.dir/all] Error 2
    CMakeFiles/Makefile2:481: recipe for target 'src/test/CMakeFiles/Test.dir/rule' failed
    make[1]: *** [src/test/CMakeFiles/Test.dir/rule] Error 2
    Makefile:266: recipe for target 'Test' failed
    make: *** [Test] Error 2

  5. #5
    Membre très actif Avatar de Matthieu76
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2013
    Messages
    568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 568
    Par défaut Idée originale
    Ou sinon tu peux aussi faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class MyClass : public MyclassPublicMethod, private MyclassPrivateMethod
    {
    // aucun code ici
    };
     
    class MyClassForTest : public MyclassPublicMethod, public MyclassPrivateMethod
    {
    // aucun code ici
    };
    Et dans MyclassPrivateMethod tu mets tout en public.

    J'ai jamais testé, j'ai eu l'idée en lisant ton post. Je pense que ça fonctionnerait bien mais c'est vraiment pas très beau.

  6. #6
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 760
    Par défaut
    Il est possible d'utiliser l'option -fno-access-control sur clang et gcc qui met tout en public. Je trouve moyen cette approche surtout que FRIEND_TEST est censé fait pour.

    Il ressemble à quoi le code de test ?

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 80
    Par défaut
    merci pour les reponse

    Matthieu76 j'aimerais autant éviter de faire comme cela si la méthode de GTest fonctionne mais effectivement en dernier recourt cette méthode peux marche

    jo_link_noir voici le code de test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    EvaluateController.cc
     
    namespace{
    	class EvaluateControllerTest : public :: testing::Test{
     
    TEST_F(EvaluateControllerTest, calculateMeanTest){
        EvaluateController* evaluateController = EvaluateController::getInstance();
        list<float> measure;
        measure.push_back(9);
        EXPECT_EQ(evaluateController->calculateMean(measure),9);
    }
    qui etait juste en dessus du code ou il y a le .h

  8. #8
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 760
    Par défaut
    Je n'avais pas vu le scroll .

    La doc est plutôt clair, il faut que EvaluateController et EvaluateControllerTest soit dans le même namespace. Or, le namespace global et un namespace anonyme sont 2 namespaces différents.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [APEX] Test Method
    Par Lotus355 dans le forum Salesforce.com
    Réponses: 4
    Dernier message: 16/12/2013, 10h18
  2. tdd et methode privée
    Par angel46 dans le forum ALM
    Réponses: 4
    Dernier message: 06/08/2013, 19h13
  3. Réponses: 6
    Dernier message: 17/02/2009, 19h32
  4. [unit test] methode protected / private
    Par ZaaN dans le forum C#
    Réponses: 2
    Dernier message: 10/03/2008, 16h10
  5. [Cppunit] test de methodes privees
    Par Patriarch24 dans le forum Bibliothèques
    Réponses: 7
    Dernier message: 06/03/2006, 14h59

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