天天看點

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 。确認。

gtest測試MFC項目

圖表 1

gtest測試MFC項目

圖表 2

gtest測試MFC項目

圖表 3

6.         複制 gtest 頭檔案 gtest-1.5.0/include 檔案夾及庫 gtestd.lib   gtest.lib 到 MFC 測試工程中

gtest測試MFC項目

圖表 4

7.         将在 MFC 工程中指明 gtestd.lib 路徑與 include 檔案夾路徑

項目—— > 屬性—— > 配置屬性—— >c/c++ —— > 正常—— > 附加包含項目

設定 gtest 頭檔案路徑為 F:/download/gtest/test_mfc/include

gtest測試MFC項目

圖表 5

項目—— > 屬性—— > 配置屬性—— > 連接配接器—— > 輸入—— > 附加依賴項

       設定 gtest.lib 庫路徑 F:/download/gtest/test_mfc/gtestd.lib

gtest測試MFC項目

圖表 6

8.         設定運作模式

項目—— > 屬性—— > 配置屬性—— >c/c++ —— > 代碼生成—— > 運作時庫—— > 多線程調試 (/MTd)

gtest測試MFC項目

圖表 7

9.         項目—— > 屬性—— > 配置屬性—— > 正常—— >MFC 的使用

選擇“在靜态庫中使用 MFC ”

gtest測試MFC項目

圖表 8

10.     添加簡易代碼,隻作個最簡單的例子

10.1.     添加檔案頭,要添加到 test_mfc.cpp 頭部

#include <conio.h>  

#include <fcntl.h>  

#include <io.h>  

#include <gtest/gtest.h>

gtest測試MFC項目

圖表 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項目

圖表 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) );

}

gtest測試MFC項目

圖表 11

11.2  編譯

gtest測試MFC項目

圖表 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.     結束