我可以返回并触发一个动作,例如用.Will重复增加一个计数器?

时间:2015-10-12 16:01:08

标签: c++ mocking googlemock gmock

我想在Return的{​​{1}}上触发 AND .WillRepeatedly()某项操作。

有谁知道怎么做? (正在编写一个函数,它会增加一个引用的参数并返回我想要的是这里唯一的选项吗?)

这是我尝试失败的尝试:

googlemock
EXPECT_CALL(parser, getTemplateFileName(_))
  .WillRepeatedly(Invoke(parser.counter++), Return(TEMPLATE_NAME));

修改

正如kerrek提到的那样,我试过这个:

class TemplateParser: public Parser
{
    public:
        MOCK_METHOD1(getTemplateFileName, std::string(const string& name));

        void incrementCounter()
        {
          ++counter;
        }
};

// ...

EXPECT_CALL(parser, getTemplateFileName(_))
  .WillRepeatedly(Invoke(&parser, &TemplateParser::incrementCounter),
                  Return(TEMPLATE_NAME));

但我收到的错误如下:

EXPECT_CALL(parser, getTemplateFileName(_))
  .WillRepeatedly(DoAll(
                  Invoke(&parser, &TemplateParser::incrementCounter),
                  Return(TEMPLATE_NAME)
                       )
                  );

1 个答案:

答案 0 :(得分:1)

您可以使用DoAll作为Kerrek在使用InvokeWithoutArgs的评论中建议。

另一种方法是创建一个自定义函数,通过使用lambda以非常简单的方式执行这两个操作。

EXPECT_CALL(parser, getTemplateFileName(_))
    .WillRepeatedly(InvokeWithoutArgs([&]()
                                      {
                                          parser.counter++;
                                          return TEMPLATE_NAME;
                                      });