VS2010使用GooglTest,GoogleMock

来源:互联网 发布:说散就散 知乎 编辑:程序博客网 时间:2024/04/29 11:57

一、环境搭建

下载gmock-1.6.0.zip  官网:gmock

二、设置系统环境变量

说明:将gmock-1.6.0.zip解压到D:盘

GMOCK_DIR=D:\gmock-1.6.0

GTEST_DIR=D:\gmock-1.6.0\gtest  

三、编译gmock源码

进入D:\gmock-1.6.0\msvc\2010

用vs2010打开gmock.sln,打开后,按F7

生成解决方案后,将会在Debug中生成gmock.lib,gmock_main.lib,gmock_test.exe

gmock就编译结束了。

四、在VS2010中使用gmock

新建一个控制台程序 源码如下:

#include<iostream>#include<gtest/gtest.h>#include<gmock/gmock.h>#pragma comment(lib,"gmock.lib")using namespace std;int main(int argc, char** argv){testing::InitGoogleMock(&argc, argv); int r = RUN_ALL_TESTS(); return 0;}

说明:将gmock.lib拷贝到工程目录里。

在工程的VC++目录-》包含目录中添加 $(GMOCK_DIR)/include;$(GTEST_DIR)/include;


错误处理:

如果编译时出现以下内容:

libcmtd.lib(errmode.obj) : error LNK2005: ___set_app_type 已经在 MSVCRTD.lib(MSVCR100D.dll) 中定义
1>libcmtd.lib(invarg.obj) : error LNK2005: __invoke_watson 已经在 MSVCRTD.lib(MSVCR100D.dll) 中定义
1>libcmtd.lib(dbgheap.obj) : error LNK2005: __CrtSetCheckCount 已经在 MSVCRTD.lib(MSVCR100D.dll) 中定义
1>libcmtd.lib(hooks.obj) : error LNK2005: "void __cdecl terminate(void)" (?terminate@@YAXXZ) 已经在 MSVCRTD.lib(MSVCR100D.dll) 中定义
1>libcmtd.lib(setlocal.obj) : error LNK2005: __configthreadlocale 已经在 MSVCRTD.lib(MSVCR100D.dll) 中定义
1>libcmtd.lib(crt0dat.obj) : error LNK2005: _exit 已经在 MSVCRTD.lib(MSVCR100D.dll) 中定义
1>libcmtd.lib(crt0dat.obj) : error LNK2005: __exit 已经在 MSVCRTD.lib(MSVCR100D.dll) 中定义
1>libcmtd.lib(crt0dat.obj) : error LNK2005: __cexit 已经在 MSVCRTD.lib(MSVCR100D.dll) 中定义
1>libcmtd.lib(crt0dat.obj) : error LNK2005: __amsg_exit 已经在 MSVCRTD.lib(MSVCR100D.dll) 中定义
1>libcmtd.lib(crt0dat.obj) : error LNK2005: __initterm_e 已经在 MSVCRTD.lib(MSVCR100D.dll) 中定义
1>libcmtd.lib(crt0.obj) : error LNK2005: _mainCRTStartup 已经在 MSVCRTD.lib(crtexe.obj) 中定义
1>libcmtd.lib(mlock.obj) : error LNK2005: __lock 已经在 MSVCRTD.lib(MSVCR100D.dll) 中定义
1>libcmtd.lib(mlock.obj) : error LNK2005: __unlock 已经在 MSVCRTD.lib(MSVCR100D.dll) 中定义
1>libcmtd.lib(dbghook.obj) : error LNK2005: __crt_debugger_hook 已经在 MSVCRTD.lib(MSVCR100D.dll) 中定义
1>libcmtd.lib(winxfltr.obj) : error LNK2005: __XcptFilter 已经在 MSVCRTD.lib(MSVCR100D.dll) 中定义
1>libcmtd.lib(crt0init.obj) : error LNK2005: ___xi_a 已经在 MSVCRTD.lib(cinitexe.obj) 中定义


解决方法:项目属性(Alt+F7)——C/C++——代码生成——

如果是Debug的“在静态库中使用MFC”,不要使用MDd,改用MTd,然后编译即可通过。

如果是Debug的“在共享DLL中使用MFC”,注意不要使用MTd,改用MDd;

如果是Release版本“在静态库中使用MFC”,不要使用MD,使用MT;

如果是Release版本的“在共享DLL中使用MFC”,不要使用MT,使用MD。

保持gmock生成的gmock.lib和工程中使用gmock.lib编译代码生成时,运行库的设置相同。

原创粉丝点击