在Google Test中,无法为同一个模拟对象的同一个函数设置不同的EXPECT_CALL。这是因为EXPECT_CALL是在测试用例中对模拟对象的行为进行设定的,而不是在运行时动态设定的。
解决这个问题的方法是使用不同的模拟对象来模拟不同的行为。下面是一个示例代码:
#include
class MockFoo {
public:
MOCK_METHOD(void, Foo, ());
};
class MockBar {
public:
MOCK_METHOD(void, Bar, ());
};
TEST(MyTest, Example) {
MockFoo foo;
MockBar bar;
EXPECT_CALL(foo, Foo()).Times(1);
EXPECT_CALL(bar, Bar()).Times(2);
foo.Foo();
bar.Bar();
bar.Bar();
}
在这个示例中,我们创建了两个不同的模拟对象foo
和bar
,并分别对它们的函数Foo
和Bar
进行了不同的EXPECT_CALL。这样就可以为不同的模拟对象设置不同的行为,避免了为单个模拟对象的唯一函数设置不同的EXPECT_CALL的问题。