0

在 Visual Studio 中对托管 C++ 代码进行单元测试时存在一个众所周知的问题:调用回托管的非托管代码无法跨应用程序域并导致单元测试崩溃,如此处所述:http: //social.msdn.microsoft.com/论坛/is/vststest/thread/fc7bc074-ff05-407b-b646-d9e5532c6998 以及更多详细信息:http: //lambert.geek.nz/2007/05/29/unmanaged-appdomain-callback

使用 /noisolation 标志是一种解决方案,但它仅在 Visual Studio 之外运行测试时有效,这意味着您无法在 Visual Studio 中调试测试。

对我来说,这是一件大事。我很难理解微软至少从 2006 年起就不想解决这个问题。发现即使是 Visual Studio 11 beta 也没有提供任何新的东西,这让我非常失望。

所以我转向 NUnit 并开始运行我的测试,并选择了“对所有测试使用单个 AppDomain”。令人失望的是,NUnit 显示消息:“执行此测试时抛出未处理的 System.ArgumentException:无法跨 AppDomain 传递 GCHandle。” 之后它崩溃了。

我希望我能够调试并避免 GCHandle AppDomain 问题。我是否误解了单个 AppDomain 选项的含义?NUnit 2.6 是否在单独的 AppDomain 中执行测试并且仍然没有选项可以更改它?

4

1 回答 1

0

根据 NUnit 组的 Charlie Poole 的回答:

https://groups.google.com/forum/?fromgroups&hl=en#!topic/nunit-discuss/elG7oyCOyBw

NUnit 主(驱动程序)程序在与被测试代码不同的 AppDomain 中执行。单个 AppDomain 意味着单个仅用于所有要测试的代码。

Charlie 建议使用 NUnitLite,它对“一切”使用单个 AppDomain,并且在测试 0.7 版本之后,我很高兴我可以调试使用 gcroot 的 C++/CLI 代码测试。

在 Visual Studio 中集成 NUnitLite 的 UI 将是一个额外的好处,但现在我可以没有它。

于 2012-05-18T23:57:27.977 回答