我班级的构造函数是
A( ...
std::function<bool(const std::string&, const std::string&)> aCallBack,
... );
我想用EXPECT_CALL来测试它。这个回调来自另一个类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对象的函数指针?
谢谢!
答案 0 :(得分:1)
使用单元测试,你应该只测试你的A类,所以你的测试应该检查传递给构造函数的任何函数是否被调用。 所以你不需要模拟,只需传递一个只用布尔值(或计数器)记录的lambda。
bool gotCalled = false;
A a( [&gotCalled]( const std::string&, const std::string& ) { gotCalled = true; return true; } );
...
ASSERT_TRUE( gotCalled );
答案 1 :(得分:1)
如果要使用模拟来跟踪呼叫并设置返回值,则可以使用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()
...);