CppUnitLite测试MFC项目

这篇博客介绍如何利用CppUnitLite框架对MFC应用程序中的对话框类进行单元测试,通过创建对话框实例并验证其属性和行为来确保功能正确性。
摘要由CSDN通过智能技术生成
CppUnitLite简单易用,而且给程序员提供了很大的扩展性。一般来说,对于普通的逻辑判断,I/O操作甚至网络(虽然不一定是单元测试的范畴),已经可以做到很好的支持了。但是,对于界面程序,如何做单元测试呢?下面就以MFC作为例子进行介绍。
 
1.为你的MFC程序建一个测试工程(CppUnit的入门使用,见 http://blog.csdn.net/enjoyeclipse/archive/2008/08/01/2750759.aspx)。由于要测试MFC程序,因此要选择共享中支持MFC.又由于MFC一般对ATL的支持,同时也要选择支持ATL.

2.添加源文件。若源文件是以DLL或Lib方式的,例如MyMFC.lib,那么链接器要讲该lib添加进去;如果是exe方式的,那么就把源文件添加到你的工程中。注意:可能有链接库冲突的问题,我这里要排除的是LIBCD.lib。

3.测试源文件,下面是我的程序代码:
  1. #include "stdafx.h"
  2. #include "TestHarness.h"
  3. #include "AddAreaDlg.h"

  4. TEST(CMFCDlg, Test1)
  5. {
  6.     CMFCDlgdlg;
  7.     dlg.m_strID = "";
  8.     dlg.Create(CMFCDlgdlg::IDD);
  9.     CString rString;
  10.     dlg.GetWindowText(rString);
  11.     CHECK(rString == "ID");
  12. }
4.OK,运行吧。不出意外的话,程序崩掉!程序显示崩在了CDialog中的Create函数里面,都是 ASSERT(FALSE)惹得祸
  1. if (!_AfxCheckDialogTemplate(lpszTemplateName, FALSE))
  2.     {
  3.         ASSERT(FALSE);          // invalid dialog template name
  4.         PostNcDestroy();        // cleanup if Create fails too soon
  5.         return FALSE;
  6.     }
那么,我们看看_AfxCheckDialogTemplate究竟做了什么:
  1. BOOL AFXAPI _AfxCheckDialogTemplate(LPCTSTR lpszResource, BOOL bInvisibleChild)
  2. {
  3.     ASSERT(lpszResource != NULL);
  4.     HINSTANCE hInst = AfxFindResourceHandle(lpszResource, RT_DIALOG);
  5.     HRSRC hResource = ::FindResource(hInst, lpszResource, RT_DIALOG);
  6.     if (hResource == NULL)
  7.     {
  8.         if (DWORD_PTR(lpszResource) > 0xffff)
  9.             TRACE(traceAppMsg, 0, _T("ERROR: Cannot find dialog template named '%s'./n"),
  10.                 lpszResource);
  11.         else
  12.             TRACE(traceAppMsg, 0, "ERROR: Cannot find dialog template with IDD 0x%04X./n",
  13.                 LOWORD((DWORD_PTR)lpszResource));
  14.         return FALSE;
  15.     }
  16.     // 以下省略
  17. }
原来这个函数就是将对话框的资源根据ID从资源文件加载上来。俄,加载失败后就返回FALSE了。对了,我们还要把原工程
的所有资源加载到你的测试项目中来。在VS系列中,只要简单的复制-〉粘贴就可以了。

再运行一下,不出意外的话,应该就可以运行测试了。

PS:对于界面工程,除了运行单元测试外,最好加以QTP进行功能测试。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值