在Visual Studio中对托管的C ++代码进行单元测试时存在一个众所周知的问题:回调到托管的非托管代码无法跨应用域并崩溃单元测试,如下所述: http://social.msdn.microsoft.com/Forums/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测试版都没有提供任何新功能是一件非常令人失望的事情。
所以我转向NUnit并开始运行我的测试,选择“为所有测试使用单个AppDomain”。令人失望的是,NUnit显示消息:“执行此测试时抛出了未处理的System.ArgumentException:无法通过AppDomains传递GCHandle。”之后它崩溃了。
我希望我能够同时调试并避免GCHandle AppDomain问题。我是否误解了单个AppDomain选项的含义? NUnit 2.6是否在单独的AppDomain中执行测试,是否仍然没有更改的选项?
答案 0 :(得分:0)
根据NUnit集团的Charlie Poole的回答:
https://groups.google.com/forum/?fromgroups&hl=en#!topic/nunit-discuss/elG7oyCOyBw
NUnit main(驱动程序)程序在不同的AppDomain中从被测试的代码执行。单个AppDomain仅表示要测试的所有代码的单个。
Charlie建议使用NUnitLite,它使用单个AppDomain作为“一切”,在测试0.7版本后,我很高兴能够调试我使用gcroot的C ++ / CLI代码测试。
NUnitLite在Visual Studio中的UI集成将是一个很好的额外奖励,但是现在我可以没有它。