C++ 从模拟函数调用捕获void*参数
使用的模拟库:GMock 我试图捕获一个C++ 从模拟函数调用捕获void*参数,c++,unit-testing,void-pointers,gmock,C++,Unit Testing,Void Pointers,Gmock,使用的模拟库:GMock 我试图捕获一个void*参数,该参数作为模拟对象上函数调用的一部分传递。我能够捕获通过SaveArg传递的int值,但当我试图使用它捕获void*参数时,它抛出编译错误 错误:gmock/include/gmock/gmock更多操作。h:155:错误:“const void*”不是指向对象类型的指针 代码(相关部分): Struct Blah { INTA; int b; }; 上课{ void一些函数(const void*arg0,u64 arg1); }; 类M
void*
参数,该参数作为模拟对象上函数调用的一部分传递。我能够捕获通过SaveArg
传递的int值,但当我试图使用它捕获void*
参数时,它抛出编译错误
错误:gmock/include/gmock/gmock更多操作。h:155:错误:“const void*”不是指向对象类型的指针
代码(相关部分):
Struct Blah
{
INTA;
int b;
};
上课{
void一些函数(const void*arg0,u64 arg1);
};
类MockSomeClass:public SomeClass{
.
.//保存模拟定义
.
};
类MyClass
{
某类*\u dep;
MyClass(SomeClass*dep)
{
_dep=dep;
};
无效测试_函数()
{
废话b=新废话();
_dep->some_函数(b,sizeof(Blah));
}
};
测试(某个测试用例,一个)
{
MockSomeClass mock_object=新的MockSomeClass();
无效*实际参数;
EXPECT_CALL(*mock_object,some_函数(u,)).WillOnce(SaveArg(实际_arg));//抛出编译错误
MyClass测试对象=新的MyClass(模拟对象);
测试对象->测试函数();
}
问题在于SaveArg需要一个地址位置来保存内容。由于我捕获了一个指针,它会将arg指针指向的地址保存在我给saveArg的地址位置。所以它必须是SaveArg(&actual_arg)。
一句话:我在捕获指针时感到困惑,尽管实际的_arg本身是一个指针SaveArg,它希望它的地址在内存中,这样它就可以保存内容
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();
}