NUnit 2.5.7在VS2010下需要显式调试附加。

3
我刚刚将NUnit从2.5.2升级到2.5.7,以便可以对使用.Net Framework 4构建的DLL运行单元测试。我长期以来一直通过项目属性下的“StartExternalProgram”属性使用2.5.2。在那种情况下,我从未必须明确地调试附加到NUnit进程。
现在,在2.5.7下,似乎必须明确地附加到NUnit_Agent进程才能调试被测试的代码。
当然,这意味着我现在不再需要两次点击来运行我的单元测试,而是需要在VS2010中点击Debug.Run图标,等待NUnit GUI出现,alt-Tab回到VS2010,点击Debug.Attach..,滚动列表以找到NUnit Agent,双击选择它,alt-Tab回到NUnit GUI,点击Run来运行测试。
那么,使用NUnit在2.5.7下变得更加困难的原因是什么,还是有什么问题吗?
提前感谢您恢复早期版本的“自动调试附加”所提供的任何建议。
2个回答

6

问题在于NUnit正在启动一个子进程(nunit-agent.exe)。我通过打开nunit.exe.config并添加以下部分来解决这个问题:

<startup>
    <supportedRuntime version="v4.0.30319" />
</startup>

编辑:如果您仍然想在 .Net 2.0 中使用 nunit,请确保也添加了该版本。我的配置最终看起来像这样:

<startup>
    <supportedRuntime version="v2.0.50727" />
    <supportedRuntime version="v4.0.30319" />
</startup>

编辑2:我最近还发现条目的顺序也很重要。

尝试过了,但没有成功;即断点没有被触发。我正在使用x86变体,但不知道这会有什么区别。我在文件nunint-x86.exe.config中将<startup>元素添加为<configuration>元素的第一个子元素。我很好奇为什么添加这个元素会避免启动代理进程? - Bill Cohagan
据我所知,如果您使用的运行时与支持的运行时不同,则会启动代理进程。 - Pedro
有没有想法为什么这对我不起作用?我注意到代理进程没有启动,所以修复的这个方面似乎是有效的;但是当我运行应用程序并且 NUnit 启动时,运行测试会忽略我设置的任何断点。在 NUnit 本身的设置中怎么样(在 Tools.Settings 下)?我尝试了“直接在 NUnit 进程中运行测试”,因为它似乎是显而易见的选择,但那并没有帮助。还有其他想法吗? - Bill Cohagan
打开或关闭阴影副本可能会改变行为,但我不确定是否导致了问题... - Pedro
+1 啊,这对我很有帮助!非常感谢。我使用了<requiredRuntime>而不是<supportedRuntime>。我会阅读相关差异的资料,但现在已经解决了问题。谢谢! - Dave
1
@Pedro:完整的解决方案在这个[链接][https://dev59.com/rHNA5IYBdhLWcg3wgeOk]中。 - mas_oz2k1

0
也许并不是解决您问题的答案,但可以从另一个角度来看待它:Resharper包含一个组件,可以在VS2010界面内运行nunit测试,而无需任何单独配置的外部程序。这可能会为您简化事情?

如果找不到其他解决方案,可以尝试一下;然而另一个选择是使用VS2010内置的测试支持。我更喜欢NUnit,但不需要所有额外的花哨功能。 - Bill Cohagan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接