在 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 中执行测试并且仍然没有选项可以更改它?