gtest测试MFC项目

gtest 测试 MFC 项目

 作者:wulong710

1.         前言

参考《图解 MFC 程序中使用 Google 单元测试工具 GTest 进行 TDD 开发 》,简易版。

2.         环境

使用 VS2005 编译

下载 http://code.google.com/p/googletest/downloads/list/gtest-1.5.0.zip

3.         解压 gtest-1.5.0.zip 包,打开 gtest-1.5.0/msvc/ gtest.sln 编译

按照 DEBUG 模式和 RELEASE 模式各编译一遍,在文件夹 gtest-1.5.0/msvc/gtest 中得到测试用的库文件 gtestd.lib gtest.lib

4.         建立 MFC 对话框工程 test_mfc

5.         新建解决方案配置

Debug —— > 配置管理器—— > 活动解决方案配置—— > 新建 ,跳出新建解决方案配置对话框。 “名称”栏填入 Debug_gtest ,“从此处复制设置”栏选择 Debug 。确认。

 


图表 1

图表 2

图表 3

6.         复制 gtest 头文件 gtest-1.5.0/include 文件夹及库 gtestd.lib   gtest.lib MFC 测试工程中

gtest测试MFC项目_第1张图片

图表 4

7.         将在 MFC 工程中指明 gtestd.lib 路径与 include 文件夹路径

项目—— > 属性—— > 配置属性—— >c/c++ —— > 常规—— > 附加包含项目

设置 gtest 头文件路径为 F:/download/gtest/test_mfc/include

 

gtest测试MFC项目_第2张图片

图表 5

项目—— > 属性—— > 配置属性—— > 连接器—— > 输入—— > 附加依赖项

       设置 gtest.lib 库路径 F:/download/gtest/test_mfc/gtestd.lib

gtest测试MFC项目_第3张图片

图表 6

 

8.         设置运行模式

项目—— > 属性—— > 配置属性—— >c/c++ —— > 代码生成—— > 运行时库—— > 多线程调试 (/MTd)

gtest测试MFC项目_第4张图片

图表 7

 

9.         项目—— > 属性—— > 配置属性—— > 常规—— >MFC 的使用

选择“在静态库中使用 MFC

图表 8

 

10.     添加简易代码,只作个最简单的例子

10.1.     添加文件头,要添加到 test_mfc.cpp 头部

#include <conio.h>  

#include <fcntl.h>  

#include <io.h>  

#include <gtest/gtest.h>

 

gtest测试MFC项目_第5张图片

图表 9

10.2.     添加控制台类,用来显示 gtest 测试信息。直接写在 test_mfc.cpp

class CConsole 

public

     CConsole(void ); 

     virtual ~CConsole(void ); 

private

 

}; 

 

 

CConsole::CConsole(void

     AllocConsole(); 

     int hCrun;     

     hCrun = _open_osfhandle((long )GetStdHandle(STD_OUTPUT_HANDLE), _O_TEXT); 

     FILE* hFile  = _fdopen(hCrun, "w" ); 

 

     // use default stream buffer 

     setvbuf(hFile, NULL, _IONBF, 0); 

     *stdout = *hFile; 

 

     //test  

     //_cprintf("test console by _cprintf/n", 0); 

     //std::cout << "test console by std::out/n"; 

 

 

CConsole::~CConsole(void

     FreeConsole(); 

 

 

10.3.     调用 gtest 测试,在 Ctest_mfcApp::InitInstance 中添加测试代码

BOOL Ctest_mfcApp::InitInstance()

{

 

#if 1

 

     CConsole cc; 

 

     int argc = 0; 

     TCHAR* argv = _T("" ); 

     testing::GTEST_FLAG(output) = "xml:"; //加上这条则测试结果以xml格式保存下来。保存路径可以修改,如"xml:d/"表示保存到d:下

     testing::InitGoogleTest(&argc, &argv); 

     RUN_ALL_TESTS(); 

 

     HWND hwnd = GetConsoleWindow(); 

     SetWindowPos(hwnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); 

     AfxMessageBox(_T("about to exit!" )); 

 

     return FALSE;

#endif

}

 

10.4.     编译,结果如图

gtest测试MFC项目_第6张图片

图表 10

11.     测试的例子

11.1  直接添加到 tset_mfc.cpp 中,不另建测试类

 

int func_check (int val = 0)

{

     return val;

}

 

TEST(larg_name, wrong_test)

{

     EXPECT_EQ( 10, func_check (15) );

}

 

TEST(larg_name, right_test)

{

     EXPECT_EQ( 20, func_check (20) );

}

 

图表 11

11.2  编译

图表 12

 

f:/download/gtest/test_mfc/test_mfc/test_mfc.cpp(143): error: Value of: func_check (15)

  Actual: 15

Expected: 10

 

提示在 test_mfc.cpp 文件 143 行的测试用例有错, func_check 函数应该返回 15 ,结果返回 10

 

12.     结束

你可能感兴趣的:(gtest测试MFC项目)