使用 Gmock 调用成员函数
using Gmock to call a member function
这是我第一次使用 gmock 并使用这个 Mock 示例 class
class MockInterface : public ExpInterface
{
public:
MockInterface() : ExpInterface()
{
ON_CALL(*this, func(testing::_)).WillByDefault(testing::Invoke([this]() {
// I need to fill the testVec with the vector passed as parameter to func
return true; }));
}
MOCK_METHOD1(func, bool(const std::vector<int>&));
~MockInterface() = default;
private:
std::vector<int> _testVec;
};
然后我创建了一个 MockInterface 实例
auto mockInt = std::make_shared<MockInterface>();
当调用 mockInt->func(vec);
时,我需要用传递给 func
函数的参数向量填充 _testVec,如何用 gMock 做这种事情?
您可以改用 SaveArg
操作:
ON_CALL(*this, func(::testing::_)).WillByDefault(
::testing::DoAll(
::testing::SaveArg<0>(&_testVec),
::testing::Return(false)));
如果要调用成员函数,可以使用 lambda 或 pointer-to-member 语法。
ON_CALL(*this, func(::testing::_)).WillByDefault(
::testing::Invoke(this, &MockInterface::foo);
ON_CALL(*this, func(::testing::_)).WillByDefault(
::testing::Invoke([this](const std::vector& arg){ return foo();});
请记住,Invoke
会将模拟接收到的所有参数传递给调用的函数,并且它必须 return 与模拟函数的类型相同。如果你想要它没有参数,使用 InvokeWithoutArgs
.
这是我第一次使用 gmock 并使用这个 Mock 示例 class
class MockInterface : public ExpInterface
{
public:
MockInterface() : ExpInterface()
{
ON_CALL(*this, func(testing::_)).WillByDefault(testing::Invoke([this]() {
// I need to fill the testVec with the vector passed as parameter to func
return true; }));
}
MOCK_METHOD1(func, bool(const std::vector<int>&));
~MockInterface() = default;
private:
std::vector<int> _testVec;
};
然后我创建了一个 MockInterface 实例
auto mockInt = std::make_shared<MockInterface>();
当调用 mockInt->func(vec);
时,我需要用传递给 func
函数的参数向量填充 _testVec,如何用 gMock 做这种事情?
您可以改用 SaveArg
操作:
ON_CALL(*this, func(::testing::_)).WillByDefault(
::testing::DoAll(
::testing::SaveArg<0>(&_testVec),
::testing::Return(false)));
如果要调用成员函数,可以使用 lambda 或 pointer-to-member 语法。
ON_CALL(*this, func(::testing::_)).WillByDefault(
::testing::Invoke(this, &MockInterface::foo);
ON_CALL(*this, func(::testing::_)).WillByDefault(
::testing::Invoke([this](const std::vector& arg){ return foo();});
请记住,Invoke
会将模拟接收到的所有参数传递给调用的函数,并且它必须 return 与模拟函数的类型相同。如果你想要它没有参数,使用 InvokeWithoutArgs
.