Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调试在NUnit下运行的测试_C#_Nunit - Fatal编程技术网

C# 调试在NUnit下运行的测试

C# 调试在NUnit下运行的测试,c#,nunit,C#,Nunit,我有一个.NET4.0C#解决方案,其中包含一个测试项目,该项目在NUnit下运行单元测试。NUnit二进制文件是v3.5 我可以很好地运行测试,但不能在VisualStudio中设置断点和单步。我猜这是由.NET版本中的错误匹配造成的。是否有任何方法可以使用nunit for v3.5单步执行v4.0测试程序集?Resharper允许您在调试时单步执行单元测试。但是我不认为你可以用VisualStudio做同样的事情。尝试安装Resharper的试用版,然后尝试调试测试 我确信控制台应用程序,

我有一个.NET4.0C#解决方案,其中包含一个测试项目,该项目在NUnit下运行单元测试。NUnit二进制文件是v3.5


我可以很好地运行测试,但不能在VisualStudio中设置断点和单步。我猜这是由.NET版本中的错误匹配造成的。是否有任何方法可以使用nunit for v3.5单步执行v4.0测试程序集?

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

我确信控制台应用程序,但您应该发现可以手动启动NUnit的GUI版本,然后从Visual Studio中的调试器连接到NUnit代理进程。

另一个选项是通过Visual Studio运行测试,您可以在测试上设置断点&右键单击->运行测试->使用调试器。

问题是,除非您另行通知,否则NUnit将在确定需要时生成一个子进程来运行测试。如果您在Process Explorer中查看它,可以看到“nunit console.exe”*生成“nunit agent.exe”*。Visual Studio调试器不会自动附加到子进程

在这种情况下,我认为版本不匹配是它选择启动子进程的原因。解决此问题的最简单方法是编辑“nunit console.exe.config”*以更改
值集。应该已经有一条注释标记了您应该注释掉的行,以便强制它作为.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>

如果这对我认识的人有帮助的话,我知道这是4岁的孩子,但我遵循这里的答案,他们很有用。尽管我的答案是针对NUnit的另一个完整版本,但是对于像我这样刚刚发现这一点的人,我通过Manage NuGet软件包安装了NUnit和NUnit控制台。。。(屏幕截图中的第一个和第三个选项) 因此,在VS2015 Community edition中配置了“我的测试项目属性调试”选项卡(请参见下面的屏幕截图),以运行nunit3-console.exe,该文件位于\packages文件夹中,该文件夹是在安装“NUnit console”时自动创建的,对于我添加的参数,我的测试库dll和命令行开关--等等(这会提示开发人员“按任意键关闭”,这样您就可以看到结果),更重要的是,inprocess会自动附加测试库.NET代码,从而命中断点


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

在这种情况下,您应该能够设置断点。您如何运行测试,以及如何附加调试器?@FrankSchwieterman我的项目的调试属性有一个启动操作,指向nunit-console.exe和命令行args cont设置nunit参数。我正在设置断点,然后在解决方案资源管理器中为测试csproj选择调试。调试器运行,断点的状态会随着错误“symbols cannot loaded”(无法加载符号)而更改。嗯,听起来不像visual studio已附加到运行测试的进程(它将附加到您点击f5的任何应用程序,尽管该应用程序有一个启动NUNit的构建步骤)如果您在VS之外运行NUNit GUI应用程序,您可以加载测试DLL,然后从visual studio附加到进程。(在“调试”菜单中,单击“附加到进程”,然后找到NUNit进程)@Frankschwiterman感谢您的建议,但visual studio仍然未能加载调试符号(从与测试程序集位于同一位置的pdb加载),Resharper有时也做得不好-当您尝试执行单个步骤时,它会突破到下一个断点。有时会发生这种情况。不知道为什么=)谢谢,这很好。我相信我以前也可以用Visual Studio来实现这一点,但通过ReSharper运行也很有效!如果你想在不使用ReSharper的情况下使用Visual Studio,最好使用MSTest而不是NUnit。语法上的差异非常小。谢谢,你知道NUnit 2.6中是否还提供这一功能吗?我可以查看nunit gui的代码,但在预构建的二进制文件中看不到exe。nunit.exe是gui版本。nunit-console.exe是控制台版本。运行nunit.exe将生成nunit代理进程。太棒了,谢谢。我看到您应该添加supportedRuntime元素,但这些元素不起作用。我没有注意到我使用的是x86版本和当时它有自己的配置文件。@b参数-我不相信这会有帮助,因为当NUnit解析它的参数时,已经太晚了-它已经作为.NET 2.0进程启动,需要生成一个子进程来满足您对.NET 4.0进程的请求。我们必须重新编译它才能使其作为4.0运行吗?不,这就是为什么e配置文件可以-在.NET决定使用哪个运行时之前,它是由.NET读取的。谢谢,这解决了问题!我采取了一种稍微不同的方法,将必要的命令行选项注入其中,使其使用单个进程。要正确地将所有NUnit的内容部署到输出目录,运行程序的pr中也需要项目文件,正是我想要的谢谢
nunit-console.exe        -> nunit-console-x86.exe
nunit-agent.exe          -> nunit-agent-x86.exe
nunit-console.exe.config -> nunit-console-x86.exe.config