如何使用 gmock 模拟一个 std::function?
How to use gmock to mock up a std::function?
我的class的构造函数是
A( ...
std::function<bool(const std::string&, const std::string&)> aCallBack,
... );
我想用EXPECT_CALL来测试一下。这个回调来自另一个class B。我创建了一个模拟
class BMock : public B
{
MOCK_METHOD2( aCallBack, bool(const std::string&, const std::string&) );
}
然后我试了
B *b = new B();
std::function<bool(const std::string&, const std::string&)> func =
std::bind(&B::aCallBack, b, std::PlaceHolders::_1, std::PlaceHolders::_2);
还是不行。如何获取 gmock 对象的函数指针?
谢谢!!
使用单元测试你应该只测试你的 class A 所以你的测试应该只检查传递给构造函数的 any 函数是否被调用。
因此,您不需要模拟,只需传递一个只用布尔值(或计数器)记录的 lambda。
bool gotCalled = false;
A a( [&gotCalled]( const std::string&, const std::string& ) { gotCalled = true; return true; } );
...
ASSERT_TRUE( gotCalled );
如果您想使用 mock 来跟踪调用并设置 return 值,您可以使用 MockFunction
.
using testing::_;
using testing::MockFunction;
using testing::Return;
MockFunction<bool(const std::string&, const std::string&)> mockCallback;
EXPECT_CALL(mockCallback, Call(_, _)).WillOnce(Return(false)); // Or anything else you want to do
A( ...
mockCallback.AsStdFunction()
...);
我的class的构造函数是
A( ...
std::function<bool(const std::string&, const std::string&)> aCallBack,
... );
我想用EXPECT_CALL来测试一下。这个回调来自另一个class B。我创建了一个模拟
class BMock : public B
{
MOCK_METHOD2( aCallBack, bool(const std::string&, const std::string&) );
}
然后我试了
B *b = new B();
std::function<bool(const std::string&, const std::string&)> func =
std::bind(&B::aCallBack, b, std::PlaceHolders::_1, std::PlaceHolders::_2);
还是不行。如何获取 gmock 对象的函数指针?
谢谢!!
使用单元测试你应该只测试你的 class A 所以你的测试应该只检查传递给构造函数的 any 函数是否被调用。 因此,您不需要模拟,只需传递一个只用布尔值(或计数器)记录的 lambda。
bool gotCalled = false;
A a( [&gotCalled]( const std::string&, const std::string& ) { gotCalled = true; return true; } );
...
ASSERT_TRUE( gotCalled );
如果您想使用 mock 来跟踪调用并设置 return 值,您可以使用 MockFunction
.
using testing::_;
using testing::MockFunction;
using testing::Return;
MockFunction<bool(const std::string&, const std::string&)> mockCallback;
EXPECT_CALL(mockCallback, Call(_, _)).WillOnce(Return(false)); // Or anything else you want to do
A( ...
mockCallback.AsStdFunction()
...);