2016-02-05 1 views
0

bibliothèque Mocking utilisée: GMockCapturer un argument vide de * à partir d'un appel de fonction maquette

Im essayant de capturer un argument void* passé dans le cadre d'un appel de fonction sur un objet simulé. Im capable de capturer int les valeurs transmises par SaveArg<N> mais lorsque je tente de l'utiliser pour capturer un argument void* il lance erreur de compilation

erreur: gmock/include/gmock/gmock-more-actions.h:155: error: ‘const void*’ is not a pointer-to-object type

code (parties pertinentes):

Struct Blah 
{ 
    int a; 
    int b; 
}; 

class SomeClass { 
    void some_function(const void* arg0, u64 arg1); 
}; 

class MockSomeClass : public SomeClass { 
. 
. // Holds the mock definition 
. 
}; 

class MyClass 
{ 
    SomeClass* _dep; 

    MyClass(SomeClass* dep) 
    { 
     _dep = dep; 
    }; 

    void test_function() 
    { 
     Blah b = new Blah(); 
     _dep->some_function(b, sizeof(Blah)); 
    } 
}; 

TEST(SomeTestCase, One) 
{ 
    MockSomeClass mock_object = new MockSomeClass(); 
    void* actual_arg; 

    EXPECT_CALL(*mock_object, some_function(_,_)).WillOnce(SaveArg<0>(actual_arg)); // throws compilation err 

    MyClass test_obj = new MyClass(mock_object); 
    test_obj->test_function(); 
} 

Répondre

0

Le problème était le SaveArg s'attend à un emplacement d'adresse pour enregistrer le contenu. Depuis la capture d'un pointeur, il enregistrerait l'adresse vers laquelle pointe l'arg-point dans l'adresse que je donne à saveArg. Donc, il devait être SaveArg 0> (& actual_arg). Ligne de fond: est devenu confus depuis la capture d'un pointeur, bien que le réel lui-même est un pointeur SaveArg attend son adresse en mémoire afin qu'il puisse enregistrer le contenu.