VS2010使用GooglTest,GoogleMock

来源:互联网 发布:淘宝怎么把好评转差评 编辑:程序博客网 时间:2024/05/16 00:55

一、环境搭建

下载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

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

[cpp] view plaincopyprint?
  1. <SPAN style="FONT-SIZE: 12px">#include<iostream>  
  2. #include<gtest/gtest.h>   
  3. #include<gmock/gmock.h>   
  4. #pragma comment(lib,"gmock.lib")   
  5. using namespace std;  
  6.   
  7.   
  8. int main(int argc, char** argv)  
  9. {  
  10.     testing::InitGoogleMock(&argc, argv);   
  11.     int r = RUN_ALL_TESTS();   
  12.     return 0;  
  13. }</SPAN>  

说明:将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编译代码生成时,运行库的设置相同。