NUnit:对所有测试使用单个AppDomain - 它是否真的像宣传的那样工作?

时间:2012-05-13 04:15:18

标签: c++-cli nunit

在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中执行测试,是否仍然没有更改的选项?

1 个答案:

答案 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集成将是一个很好的额外奖励,但是现在我可以没有它。