Bonjour à tous,

J'ai un problème de mockage d'une classe
Je voudrais mocké une partie d'un objet en fait et je ne sais pas si cela est possible en cpp Natif. J'ai essayé GMock qui est bien mais complexe et pas vraiment adapté à mes besoins (Mocker des objets et des fonctions C comme l'API Win32). Je suis passé à HippoMock qui me semblait plus simple d'utilisation. Mais dans les deux cas je me suis retrouvé avec le même problème. Comment mocker juste une partie d'un objet. Plus clairement comment tester en TU une méthode d'une interface non pure qui appelle une autre méthode abstraite (comme pour les pattern template).

Exemple

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
class A
{
public:
    void methode1()
    {
         someStuff....
         method2();
         otherStuff...
    };
    virtual void methode2() = 0;
}

Ce que je souhaiterais ressemblerait à ça

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
TEST(testMethode1)
{
    MockRepository mock;
    A*a = mock.Mock<A>();
    mock.ExpectCall(a, A::methode2);
 
    a->methode2();
}
J'ai tenté ça mais ça ne marche pas et c'est logique
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
TEST(testMethode1)
{
    MockRepository mock;
    A*a = mock.Mock<A>();
    mock.ExpectCall(a, A::methode2);
    mock.ExpectCall(a, A::methode1).Do(a, A::methode1);
 
    a->methode1();
}
Je suis aussi aller voir du coté du code source, HippoMocks utilise la vTable pour remplacer les fonctions et je ne suis pas à l'aise avec cela.

Une solution est possible en cpp natif? avec un autre framework de mock ? ou une autre technique je pensais au fake ou stub ?

Merci

Ambroise