已安装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;
- Debug模式:
- 注:如果你的测试项目已经用了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
相关产品推荐
相关产品推荐

