如何谷歌模拟返回std :: function的函数?

时间:2017-04-14 21:06:49

标签: c++ lambda mocking gmock

我有一些代码使用带有返回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

我搞砸了什么?

0 个答案:

没有答案