我是新的TDD的想法。我以前沒有使用任何測試框架。最近我已經開始閱讀關於它和谷歌測試練習。 我的目標是在MFC中開發的遺留代碼庫中啓動TDD。大多數情況下,我必須使用GUI控件 - 開發新的自定義控件,爲現有的自定義控件添加功能等。所以,我想自動化GUI類的測試,這些GUI類主要來自CWnd類。如何使用谷歌測試/模擬測試基於MFC CWnd的類?
我在Visual Studio中創建了一個用於測試的win32控制檯項目,同時創建了一個項目,我在'Add common header files for'選項中勾選了MFC。 Visual Studio項目嚮導已經生成了主函數並創建了一個CWinApp對象。在主函數中,我添加了谷歌測試的樣板代碼。我將實際的項目(即要測試的)和谷歌測試(和模擬)庫編譯爲.lib並將其鏈接到測試項目。我已經成功構建了測試項目。我可以從項目中測試簡單的東西。
這是嚮導生成的代碼(包括谷歌測試樣板代碼) -
#include "stdafx.h"
#include "TestMFC.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// The one and only application object
CWinApp theApp;
using namespace std;
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
HMODULE hModule = ::GetModuleHandle(NULL);
if (hModule != NULL)
{
// initialize MFC and print and error on failure
if (!AfxWinInit(hModule, NULL, ::GetCommandLine(), 0))
{
// TODO: change error code to suit your needs
_tprintf(_T("Fatal Error: MFC initialization failed\n"));
nRetCode = 1;
}
else
{
// TODO: code your application's behavior here.
testing::InitGoogleMock(&argc, argv);
nRetCode = RUN_ALL_TESTS();
}
}
else
{
// TODO: change error code to suit your needs
_tprintf(_T("Fatal Error: GetModuleHandle failed\n"));
nRetCode = 1;
}
return nRetCode;
}
我面臨的挑戰是我不能創建實際的窗口,這將需要有消息循環。我想模擬CWnd,以便根據已知的假設測試特徵。但是,我找不到一種方法來模擬CWnd,因爲它有一些非虛擬成員函數依賴於HWND。 HWND僅在創建窗口時有效。另一個挑戰是消息處理程序不是虛函數。所以我不能模擬消息處理程序,也不能創建窗口,不能將消息路由到它的處理程序。
我需要思考如何才能解決問題。我可以做到這一點,而不用模擬或其他東西創建實際的窗口?或者我可以創建窗口和路由消息?
在此先感謝。
我已經看到編碼的用戶界面,但我不想模擬一些用戶操作。要做到這一點,我們有質量保證工程師。我想做開發者部分,這是單元測試。我想確保每個單元都正常工作。最重要的是我的目的是引入TDD(測試驅動開發)和重構遺留代碼。對於這個單元測試是由一些相關書籍的作者推薦的。 – army007
Visual Studio附帶**單元測試框架**。所以不需要安裝第三方。您可以將Coded UI和單元測試框架結合起來,以取得理想的效果。 –