在NUnit下运行调试测试

问题描述:

我有一个.NET 4.0 C#解决方案,它包含一个在NUnit下运行单元测试的测试项目。 NUnit二进制文件是v3.5。在NUnit下运行调试测试

我可以很好地运行测试,但不能在visual studio中设置断点和单步。我猜这是由.NET版本中的错误匹配引起的。有没有什么办法可以单步执行使用nunit for v3.5的v4.0测试程序集?

+0

在这种情况下,您应该能够设置断点。你如何运行测试,以及如何连接调试器? – 2012-02-15 17:16:57

+0

@FrankSchwieterman我的项目的Debug属性有一个开始动作,指向包含nunit参数的nunit-console.exe和命令行参数。我正在设置断点,然后在解决方案资源管理器中为测试csproj选择Debug。调试器运行并且断点的状态会随着错误“符号无法加载”而发生变化 – simonc 2012-02-15 17:24:19

+0

嗯,它听起来不像Visual Studio附加到运行测试的进程(它将被附加到您碰到的任何应用程序f5中,尽管该应用程序有构建步骤来启动NUNit) – 2012-02-15 17:48:33

问题是,除非你另有告知,否则NUnit会产生一个子进程来运行测试,当它确定它是必要的。如果你在Process Explorer中看到它,你可以看到“nunit-console.exe”*产生了“nunit-agent.exe”*。 Visual Studio调试器不会自动附加到子进程。

在这种情况下,我认为版本不匹配是它选择启动子进程的原因。解决此问题的最简单方法是编辑“nunit-console.exe.config”*以更改一组<supportedRuntime>值。应该已经有评论有标记线,你应该以迫使它作为.NET 4.0上运行注释:

<startup useLegacyV2RuntimeActivationPolicy="true"> 
    <!-- Comment out the next line to force use of .NET 4.0 --> 
    <supportedRuntime version="v2.0.50727" /> 
    <supportedRuntime version="v4.0.30319" /> 
</startup> 

一旦改变,在第一NUnit的过程将已经是.NET 4.0和它不应该需要产生子进程。如果您想确定,请指定/process=Single,NUnit将在单个进程中运行,否则将立即失败。

* - 如果你需要使用的x86版本,替补:

nunit-console.exe  -> nunit-console-x86.exe 
nunit-agent.exe   -> nunit-agent-x86.exe 
nunit-console.exe.config -> nunit-console-x86.exe.config 
+0

谢谢,那个窍门 – simonc 2012-03-19 11:33:17

+0

太棒了,谢谢。我曾看到你应该添加supportedRuntime元素,这些元素没有奏效。我没有注意到我使用的是x86版本,并且有它自己的配置文件。 – neminem 2013-03-29 14:59:21

+0

/framework:net-4.0怎么样? – bmargulies 2013-07-11 00:01:40

Resharper允许您在调试时单步执行单元测试。但我不认为你可以用Visual Studio做同样的事情。尝试安装Resharper的试用版,然后尝试调试测试。

+0

Resharper有时候做得不好 - 当你试图做出一个单独的步骤时,它突破了下一个断点。有时会发生。不知道为什么=) – 2012-02-15 17:51:42

+0

谢谢,这很好。我确定我以前也可以用Visual Studio做到这一点,但通过ReSharper也可以运行! – simonc 2012-02-15 17:55:55

+0

如果您想使用Visual Studio而不使用Resharper,如果您使用MSTest而不是NUnit,则会更好。语法差异非常小。 – gprasant 2012-02-15 17:58:31

我记下了控制台应用程序的相关信息,但是您应该发现可以手动启动NUnit的GUI版本,然后附加到来自Visual Studio调试器的nunit-agent进程。

+0

谢谢,你知道这是否仍然可用于nunit 2.6?我可以看到nunit-gui的代码,但无法在预编译的二进制文件中看到exe文件。 – simonc 2012-02-15 18:03:38

+1

* nunit.exe *是GUI版本。 * nunit-console.exe *是控制台版本。运行nunit.exe将产生nunit-agent进程。 – 2012-02-15 20:02:31

另一种选择是使用http://testdriven.net/通过Visual Studio运行测试,可以在测试上放置一个断点&右键单击 - >运行测试 - >与调试器。

如果它是有帮助的人,我知道这是4岁,但我在这里遵循的答案,他们是有用的。虽然我的答案是NUnit的另一个版本的整体然而,对于像我这样的,有人是刚刚发现这一点,我安装NUnit的和NUnit控制台通过管理的NuGet包...(在屏幕快照第一和第三选项) enter image description here 等配置我的测试项目属性“调试”选项卡(请参阅下面的屏幕截图)在VS2015社区版中运行nunit3-console.exe,它在安装“NUnit控制台”时自动创建的\ packages文件夹中找到,对于我添加的参数测试库dll和命令行开关--wait(提示开发人员“按任意键关闭”,这样可以看到结果),更重要的是--inprocess自动附加测试库.NET代码,以便您的断点被击中。

enter image description here

注意运行NUnit3控制台应用程序设置测试项目为启动项目。

+0

正是我想要的感谢 – user515867 2017-11-13 15:29:19