模拟用于检测函数调用。如果我们有一个带有函数对象的类,可以做什么:
#include <functional>
#include <iostream>
using namespace std;
class A {
public:
A(){};
void doit(){
//...
if(f)
f();
//...
}
function<void()> f;
};
int main(){
A a;
a.f = [] () { cout << "hello\n"; };
a.doit();
}
有没有办法在函数f
中调用doit()
进行测试?
答案 0 :(得分:1)
几天前我只需要那个。我最终做的是这样的事情:
class TestHelper
{
public:
MOCK_METHOD0(foo, void());
};
而且,当我实例化我的对象时,我传递模拟函数或使用该函数的lambda更精确(你也可以使用std :: bind)。
注意:您还需要声明要测试该函数调用。为此你有EXPECT_CALL
。
在您的示例中,它看起来像这样:
TEST(My_test)
{
A a;
TestUtil helper;
EXPECT_CALL(helper, foo()).Times(1); // Or whatever other matcher and action you want to test.
a.f = [] () { helper.foo(); };
a.doit();
}
请注意,您需要google-mock才能执行此操作。