如何在.Do()中执行两条指令?

时间:2019-08-08 11:27:45

标签: c++ hippomocks

我想在.Do()内部执行两条指令。

我不想创建其他功能。

我想做类似的事情:

mocks.ExpectCallFunc(mockedFunc).Do(a++;someFunc();)

(不起作用。)

我不想拥有(但行之有效的)是:

mocks.ExpectCallFunc(mockedFunc).Do(additionalFunc)

使用

void additionalFunc(void)
{
    a++;
    someFunc();
}

1 个答案:

答案 0 :(得分:1)

你可以创建一个函数来包装你需要的东西(如果它是一个函数 + a++ 会有点开销),或者你可以创建并传递一个 Lambda。

例如-

auto additionalFunc = [](<mockedFunc's arguments>) { a++; doFunc() ;};    
mocks.ExpectCallFunc(mockedFunc).Do(additionalFunc)

请注意,您的 lambda 必须返回并接受与 mockedFunc 相同的类型参数(即使它不使用它们)。 所以如果你模拟的函数是 bool mockedFunc(std::string&)

auto additionalFunc = [](std::string&) { a++; doFunc() ; return true;};

如果您不能使用 lambda 表达式(C++ < 11),那么您可能应该创建一个包含您需要的 2 个选项的函数。适用相同的准则(保留返回值和参数)