使用的模拟库:GMock
我试图捕获作为模拟对象上的函数调用的一部分传递的void*
参数。我能够捕获通过SaveArg<N>
传递的int值,但是当我尝试使用它来捕获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 :(得分:0)
问题是SaveArg需要一个地址位置来保存内容。由于我捕获一个指针,它将保存arg指针指向的地址 - 我给saveArg的地址位置。所以它必须是SaveArg&lt; 0&gt;(&amp; actual_arg)。 底线:因为我捕获一个指针而感到困惑,尽管actual_arg本身是一个指针SaveArg期望它在内存中的地址,因此它可以保存内容。