gmock 普通函数
时间: 2025-01-08 11:33:18 浏览: 2
### 使用 gmock 对普通 C++ 函数进行单元测试
对于普通函数的单元测试,通常这些函数依赖于其他模块或外部资源。通过 `gmock` 可以创建模拟对象来替代实际的对象,从而更好地控制测试环境并验证被测函数的行为。
#### 创建 Mock 类
当目标函数依赖某个类的方法时,可以为该类创建一个 mock 版本:
```cpp
// 原始接口声明
class Dependency {
public:
virtual ~Dependency() {}
virtual void DoSomething() = 0;
};
// 测试中的Mock版本
class MockDependency : public Dependency {
public:
MOCK_METHOD(void, DoSomething, (), (override));
};
```
此部分展示了如何定义一个继承自原始接口的 mock 类,并利用宏 `MOCK_METHOD` 来指定要模仿的方法签名[^1]。
#### 编写待测试的功能代码
假设有一个需要测试的目标函数 `FunctionUnderTest()` 它会调用上述 `Dependency` 的方法:
```cpp
double FunctionUnderTest(Dependency* dependency) {
// 执行某些操作...
dependency->DoSomething();
return CalculateResult(); // 计算结果作为返回值
}
```
这段代码表示了一个接受 `Dependency` 参数并通过它执行特定逻辑的函数[^2]。
#### 设置预期行为与断言
接下来,在测试套件里设置期望以及运行测试:
```cpp
TEST(FunctionTestSuite, TestWithMockObject) {
MockDependency mock_dependency;
EXPECT_CALL(mock_dependency, DoSomething())
.Times(Exactly(1));
double result = FunctionUnderTest(&mock_dependency);
ASSERT_EQ(result, ExpectedValue);
}
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
```
这里说明了怎样在一个具体的测试案例中实例化 mock 对象 (`MockDependency`) 并设定其行为模式 `.Times(Exactly(1))` 表明只允许一次对该方法的调用;最后比较得到的结果是否符合预期[^3]。
阅读全文