我想在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)
)
);
答案 0 :(得分:1)
您可以使用DoAll
作为Kerrek在使用InvokeWithoutArgs
的评论中建议。
另一种方法是创建一个自定义函数,通过使用lambda以非常简单的方式执行这两个操作。
EXPECT_CALL(parser, getTemplateFileName(_))
.WillRepeatedly(InvokeWithoutArgs([&]()
{
parser.counter++;
return TEMPLATE_NAME;
});