我有一些代码使用带有返回std :: function的方法的接口。在测试我的代码时,我需要模拟该接口,以验证代码处理接口可能提供的各种值。
要嘲笑的界面:
class Foo_ifc {
public:
virtual ~Foo_ifc(){};
virtual std::function<int(std::string)> get_func(std::string str) = 0;
};
class Foo_mock : public Foo_ifc {
public:
MOCK_METHOD1(get_func, std::function<int(std::string)>(std::string str));
};
使用界面的代码:
std::shared_ptr<Foo_ifc> my_ifc = std::make_shared<Foo_mock>();
int do_something(std::string thing_to_do)
{
// Use Foo_ifc to find the function to call for the given string and call it
return my_ifc->get_func(thing_to_do)();
}
使用界面测试代码:
TEST(get_func_test, find_known_functions)
{
// Setup the data I want my mocked interface to return
// It needs to return a function that takes a string and returns
// an integer.
int tmp = 5;
std::function<int(std::string)> f = [&tmp](std::string const &ref) { return tmp; };
// Make Foo_mock return our new function for all calls to get_func()
EXPECT_CALL(*Foo_mock, get_func(_)).WillRepeatedly(Return(f));
// Our code under test should now return '5' when calling 'do_something'
// no matter what string is passed to 'do_something'
EXPECT_EQ(do_something("fubar"), 5);
}
谷歌模拟告诉我:
GMOCK警告:
无趣的模拟函数调用 - 返回默认值 功能调用:
get_func(&#34; FUBAR&#34)
返回:0
这让我相信我没有设置我的EXPECT_CALL,以便正确地返回我的函数 f 。
我搞砸了什么?