【问题标题】:Assert in afxwin1.inl on line 21 when creating and testing a custom MFC CEdit in VS2012 unit test在 VS2012 单元测试中创建和测试自定义 MFC CEdit 时在第 21 行断言 afxwin1.inl
【发布时间】:2013-09-04 18:35:40
【问题描述】:

我的老板有一个名为 CInPlaceEdit 的自定义 CEdit 类,我们目前正在使用单元测试项目在 Visual Studio 2012 中测试这个类。基本上我们在单元测试中创建CEdit 类,如下所示:

CDialog *dlg = new CDialog();
dlg->Create(IDD_EDIT_STRING);
CWnd *pListCtrl = dlg;

auto pParent = pListCtrl->GetParent();


auto editSpLat = new CInPlaceEdit(-1, i, pszBlank, GetEditTemplates()->m_pEdtSpLat, (void*)&m_pSP, pListCtrl, IPE_CTRL | IPE_PTRTOPTR_VAR | IPE_RIGHT_JUSTIFY, ids);
editSpLat->Create(dwStyle, CRect(0, 0, 1, 1), pListCtrl, IDC_INPLACEEDIT + i);

第 21 行 afxwin1.inl 中的断言在调用 Create( ... ) 期间被抛出;文件 afxwin1.inl 中的断言是 ASSERT(afxCurrentInstanceHandle != NULL)。有没有办法让我的单元测试通过这个?

【问题讨论】:

  • 你的单元测试设置是什么?您的测试是在 .dll 中实现的吗?测试是如何托管的?主机应用程序是 MFC 应用程序吗?
  • 是的,我们所有的单元测试都是在 DLL 中实现的,并且被测试的应用程序是一个 MFC 应用程序。您的意思是如何托管测试?
  • 一个.dll不能自己执行,你需要提供一个hosts这个.dll的环境。随着您的单元测试被实现为 .dll,您需要确保正确管理 MFC 的状态(有关详细信息,请参阅MFC Module State Implementation)。
  • 似乎是一些静态/动态链接问题,但我可能不正确。看看这个:social.msdn.microsoft.com/Forums/vstudio/en-US/…

标签: c++ unit-testing visual-studio-2012 mfc assert


【解决方案1】:

字符集不匹配是导致此问题的一种可能性。

mfc dll 正在使用 UNICODE。

确保 "IDD_EDIT_STRING" 使用的是 unicode 但不是 ANSI。

也许尝试在字符集中使用No Set

(配置属性 -> 常规 -> 字符集)

【讨论】:

  • 您好,您可以添加更多关于此的信息吗?我的意思是更多的信息将帮助每个人更好地理解这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多