我是新的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和单元测试框架结合起来,以取得理想的效果。 –