Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从模拟函数调用捕获void*参数_C++_Unit Testing_Void Pointers_Gmock - Fatal编程技术网

C++ 从模拟函数调用捕获void*参数

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

使用的模拟库:GMock

我试图捕获一个
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();
}