You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已安装GoogleTest后,如何在Visual Studio 2017中配置GoogleMock?

把Google Mock集成到VS2017测试项目的步骤

别担心,我帮你一步步搞定gmock的集成,其实没那么复杂,跟着下面的步骤来就行:

第一步:确认NuGet包安装状态

先检查你的packages.config里是不是已经正确包含了gmock和gtest的包,两者版本最好一致,比如像这样:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Microsoft.googletest.v140.windesktop.msvcstl.static.rt-dyn" version="1.8.1" targetFramework="native" />
  <package id="googlemock.v140.windesktop.static.rt-dyn" version="1.8.1" targetFramework="native" />
</packages>

如果版本不匹配,建议卸载后重新安装同版本的两个包,避免兼容性问题。

第二步:配置项目属性

右键你的Google Test项目,选择「属性」,按照下面的路径修改配置:

1. 添加包含目录

  • 路径:C/C++ → 常规 → 附加包含目录
  • 添加内容:$(SolutionDir)packages\googlemock.v140.windesktop.static.rt-dyn.<你的版本号>\build\native\include
  • 提示:把<你的版本号>换成实际的版本,比如1.8.1,不确定的话去解决方案下的packages文件夹里找对应的gmock文件夹就行。

2. 添加库目录

  • 路径:链接器 → 常规 → 附加库目录
  • 添加内容:$(SolutionDir)packages\googlemock.v140.windesktop.static.rt-dyn.<你的版本号>\build\native\lib\$(PlatformTarget)\$(Configuration)
  • 这个路径会自动适配你当前的平台(x86/x64)和配置(Debug/Release),不用手动改。

3. 添加链接依赖项

  • 路径:链接器 → 输入 → 附加依赖项
  • 根据你的配置添加对应的库:
    • Debug模式:gmockd.lib;gmock_maind.lib;
    • Release模式:gmock.lib;gmock_main.lib;
  • 注:如果你的测试项目已经用了gtest的main,也可以只加gmockd.lib/gmock.lib,不过加上gmock_main也没问题,它会兼容gtest的逻辑。

4. 匹配运行时库

因为你装的是rt-dyn(动态运行时)的包,所以要确保项目的运行时库和包一致:

  • 路径:C/C++ → 代码生成 → 运行时库
  • 选择:
    • Debug模式:「多线程调试DLL (/MDd)」
    • Release模式:「多线程DLL (/MD)」

第三步:写个测试代码验证

现在可以写个简单的mock例子试试,比如:

#include <gmock/gmock.h>

// 定义一个要模拟的接口
class Calculator {
public:
    virtual int Add(int a, int b) = 0;
    virtual ~Calculator() = default;
};

// 定义Mock类
class MockCalculator : public Calculator {
public:
    MOCK_METHOD(int, Add, (int a, int b), (override));
};

// 测试用例
TEST(CalculatorTest, MockAddTest) {
    MockCalculator mockCalc;

    // 设置预期调用和返回值
    EXPECT_CALL(mockCalc, Add(2, 3))
        .WillOnce(testing::Return(5));

    // 调用mock方法并验证结果
    int result = mockCalc.Add(2, 3);
    EXPECT_EQ(result, 5);
}

// 如果用了gmock_main.lib,这个main可以不用写,否则需要手动添加
int main(int argc, char** argv) {
    testing::InitGoogleMock(&argc, argv);
    return RUN_ALL_TESTS();
}

写完后编译运行,如果测试通过,说明集成成功啦!

常见问题排查

  • 链接错误(找不到gmock.lib之类的):检查库目录的版本号、平台、配置是不是都对应;
  • 编译错误(找不到gmock头文件):确认包含目录的路径正确;
  • 运行时错误:检查运行时库是不是和包的rt-dyn匹配,别选成静态运行时(/MT、/MTd)。

内容的提问来源于stack exchange,提问作者TooStupidForStackOverflow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:57:26