在Gmock中,是允许在不同的模拟对象中交错使用期望和调用模拟函数的。下面是一个示例代码,演示了如何在不同的模拟对象中交错使用期望和调用模拟函数。
#include <gmock/gmock.h>
class MockObject1 {
public:
MOCK_METHOD(void, Func1, ());
MOCK_METHOD(int, Func2, ());
};
class MockObject2 {
public:
MOCK_METHOD(void, Func3, ());
MOCK_METHOD(std::string, Func4, ());
};
TEST(MockObjectTest, TestFuncs) {
MockObject1 mock1;
MockObject2 mock2;
// 设置期望
EXPECT_CALL(mock1, Func1()).WillOnce(testing::Return());
EXPECT_CALL(mock2, Func4()).WillOnce(testing::Return("mock2"));
// 调用模拟函数
mock1.Func1();
mock2.Func4();
// 设置期望
EXPECT_CALL(mock1, Func2()).WillOnce(testing::Return(123));
EXPECT_CALL(mock2, Func3()).WillOnce(testing::Return());
// 调用模拟函数
int result = mock1.Func2();
mock2.Func3();
// 验证结果
EXPECT_EQ(result, 123);
}
int main(int argc, char* argv[]) {
testing::InitGoogleMock(&argc, argv);
return RUN_ALL_TESTS();
}
在上面的示例中,我们创建了两个模拟对象MockObject1
和MockObject2
。在模拟对象MockObject1
中,我们设置了对Func1
和Func2
的期望,并在Func1
和Func2
被调用时返回了相应的值。在模拟对象MockObject2
中,我们设置了对Func3
和Func4
的期望,并在Func4
被调用时返回了一个字符串。
在测试用例MockObjectTest
中,我们首先调用了mock1.Func1()
和mock2.Func4()
来触发模拟函数的调用。然后,我们设置了对Func2
和Func3
的期望,并在Func2
被调用时返回了一个整数。最后,我们验证了Func2
的返回值是否符合预期。
通过以上示例代码,我们可以看到在不同的模拟对象中交错使用期望和调用模拟函数是可行的。