2016-02-05 2 views
0

Mocking библиотека используется: GMockЗахват недействительным * аргумент от вызова функции макете

Im пытается захватить void* аргумент, передаваемый как часть вызова функции на макете объекта. Им удалось захватить INT значения передается через SaveArg<N>, но когда я пытаюсь использовать его, чтобы захватить void* аргумент, который кидает ошибку компиляции

Ошибка: gmock/include/gmock/gmock-more-actions.h:155: error: ‘const void*’ is not a pointer-to-object type

кода (соответствующие части):

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(); 
} 

ответ

0

проблема заключалась в том, что SaveArg ожидает адресное местоположение для сохранения содержимого. Поскольку im захватывает указатель, он сохранит адрес, на который указывает указатель arg, в адресном местоположении, которое я даю saveArg. Так что это должно было быть SaveArg < 0> (& actual_arg). Итог: запутался, так как im захватил указатель, хотя сам actual_arg является указателем. SaveArg ожидает его адрес в памяти, чтобы он мог сохранить содержимое.