推荐答案
// www.javascriptcn.com code example
#include <gmock/gmock.h>
#include <gtest/gtest.h>
// 假设我们有一个接口类
class MyInterface {
public:
virtual ~MyInterface() = default;
virtual void doSomething() = 0;
};
// 创建一个模拟类
class MockMyInterface : public MyInterface {
public:
MOCK_METHOD(void, doSomething, (), (override));
};
// 测试用例
TEST(MyInterfaceTest, DoSomethingTest) {
MockMyInterface mock;
// 设置期望
EXPECT_CALL(mock, doSomething()).Times(1);
// 调用模拟方法
mock.doSomething();
}
int main(int argc, char** argv) {
::testing::InitGoogleMock(&argc, argv);
return RUN_ALL_TESTS();
}本题详细解读
1. 引入 Google Mock 和 Google Test 头文件
首先,我们需要引入 Google Mock 和 Google Test 的头文件:
#include <gmock/gmock.h> #include <gtest/gtest.h>
2. 定义接口类
假设我们有一个接口类 MyInterface,其中包含一个纯虚函数 doSomething():
class MyInterface {
public:
virtual ~MyInterface() = default;
virtual void doSomething() = 0;
};3. 创建模拟类
接下来,我们创建一个模拟类 MockMyInterface,继承自 MyInterface,并使用 MOCK_METHOD 宏来模拟 doSomething() 方法:
class MockMyInterface : public MyInterface {
public:
MOCK_METHOD(void, doSomething, (), (override));
};4. 编写测试用例
在测试用例中,我们创建一个 MockMyInterface 的实例,并使用 EXPECT_CALL 宏来设置期望,即 doSomething() 方法应该被调用一次:
// www.javascriptcn.com code example
TEST(MyInterfaceTest, DoSomethingTest) {
MockMyInterface mock;
// 设置期望
EXPECT_CALL(mock, doSomething()).Times(1);
// 调用模拟方法
mock.doSomething();
}5. 运行测试
最后,在 main 函数中初始化 Google Mock 和 Google Test,并运行所有测试:
int main(int argc, char** argv) {
::testing::InitGoogleMock(&argc, argv);
return RUN_ALL_TESTS();
}通过以上步骤,我们可以在 C++ 中使用 Google Mock 进行模拟测试。