如何从Visual Studio以调试模式运行NUnit?

时间:2009-04-17 10:11:47

标签: c# visual-studio-2008 unit-testing testing nunit

我最近一直在构建一个C#的测试框架,我一直在努力。我在我的工作区中设置了NUnit和一个新项目来测试组件。如果我从Nunit(v2.4)加载我的单元测试,一切运行良好,但我已经达到了在调试模式下运行并设置一些断点非常有用的地步。

我已经尝试了几个指南中的建议,这些指南都建议更改测试项目的“调试”属性:

Start external program: C:\Program Files\NUnit 2.4.8\bin\nunit-console.exe
Command line arguments: /assembly: <full-path-to-solution>\TestDSP\bin\Debug\TestDSP.dll

我在那里使用控制台版本,但也尝试过调用GUI。当我尝试开始调试时,两者都给出了同样的错误:

Cannot start test project 'TestDSP' because the project does not contain any tests.

这是因为我通常会将\ DSP.nunit加载到Nunit GUI并且那是测试所在的位置吗?

我开始认为问题可能是VS想要运行它自己的测试框架,这就是为什么它没能找到NUnit测试?

编辑:对于那些询问测试装置的人,TestDSP项目中的一个.cs文件看起来大致如下:

namespace Some.TestNamespace
{
    // Testing framework includes
    using NUnit.Framework;

    [TestFixture]
    public class FirFilterTest
    {
        [Test]
        public void Test01_ConstructorTest()
        {
            ...some tests...
        }
    }
}

...我对C#和NUnit测试框架都很陌生,所以我完全有可能错过了一些重要的信息; - )

最终解决方案:最大的问题是我用过的项目。如果您选择Other Languages -> Visual C# -> Test -> Test Project ...当您选择项目类型时,Visual Studio将尝试使用它自己的测试框架,据我所知。您应该选择普通 C#类库项目,然后我选择的答案中的说明将起作用。

19 个答案:

答案 0 :(得分:100)

当我需要调试我的NUnit测试时,我只需使用“Debug | Attach to Process”连接到NUnit GUI应用程序nunit-agent.exe并从GUI运行测试。我的测试中的任何断点(或他们正在测试的代码)都会被击中。我误解了你的问题,还是会对你有用?

答案 1 :(得分:45)

我使用与尝试Jon相同的技术,没有/ assembly标志,即

Start External Program: C:\Program Files\NUnit 2.4.8\bin\nunit.exe

Command line arguments: "<path>\bin\Debug\Quotes.Domain.Tests.dll"

TestDSP.dll是否包含所有TestFixtures?

由于我的测试项目不是解决方案中的启动项目,我通过右键单击测试项目并选择Debug - &gt;来运行我的测试。启动新实例

答案 2 :(得分:21)

只需删除看起来像

的行
<ProjectTypeGuids>
    {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
</ProjectTypeGuids>

来自您的项目文件。 这条线基本上告诉VS.Net它是一个测试项目,因此“无法启动测试项目”。仅在这里,第一个Guid说“这是一个测试”,第二个说“它是C#”。 有关这些Guids的信息:http://www.mztools.com/Articles/2008/MZ2008017.aspx

答案 3 :(得分:18)

除了@Justin提供的答案之外,还有NUnit 2.6的更多细节。

使用NUnit 2.6附加到nunit.exe或nunit-console.exe而不是代理。 @Justin注意到的配置略有不同。以下是nunit.exe.config中的示例(对于nunit-console.exe.config也是如此)。

<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>

对于.NET 4测试项目,要获得分数点击,您必须注释掉或删除评论建议的v2.0行。一旦我这样做,我就能够调试.NET 4.0测试项目。

答案 4 :(得分:17)

如果您使用的是NUnit 2.4或更新版本,则可以在SetUpFixture课程中添加以下代码。 (您可以使用旧版本执行此操作,但您需要执行与SetUpFixture相同的任何操作,或将其复制到测试本身。)

[SetUpFixture]
public class SetupFixtureClass
{
    [SetUp]
    public void StartTesting()
    {
        System.Diagnostics.Debugger.Launch();
    }
}

Debugger.Launch()的作用是在单击“在NUnit中运行”时显示以下对话框。

JIT Debugger Dialog

然后在项目打开时选择正在运行的visual studio实例(我的屏幕截图中的第二个),然后将附加调试器,并在Visual Studio中显示任何断点或异常。

答案 5 :(得分:10)

在Nunit 3.0.1(我使用VS2013)中,从主菜单打开&gt;测试&gt; Windows&gt;测试浏览器。然后在&#34;测试资源管理器&#34;中,右键单击测试用例,您可能会看到: enter image description here

希望这有帮助。

答案 6 :(得分:6)

尝试NUnitit - 一个用于调试NUnit测试用例的开源Visual Studio Addin

主页 - http://nunitit.codeplex.com/

答案 7 :(得分:6)

安装TestDriven.NET,这是Visual Studio的插件

从那里,您可以右键单击您的单元测试程序集并单击Run Tests运行整个套件,右键单击TestFixture类以仅运行该类中的测试,或者右键单击Test方法以仅运行该测试方法

如果需要在调试模式下断点测试,还可以选择Test With Debugger。

答案 8 :(得分:5)

从项目文件中删除ProjectTypeGuids。

答案 9 :(得分:3)

现在有图片:

  1. 运行NUnit gui(Download 2.6.2 from here),然后转到File -> Open Project
  2. enter image description here

    1. 从bin文件夹(.dll

    2. 中选择您的测试C:\......\[SolutionFolder][ProjectFolder]\bin\Debug\xxxxTests.dll
    3. 转到Visual Studio Debug -> Attach to process(将打开附加到流程窗口)

    4. 从列表中向下滚动并选择nunit-agent.exe,然后点击Attach

    5. enter image description here

      1. 此时,测试中的断点应变为成熟的红色(从空心处)。

      2. 点击Run上的Nunit Gui,你应该得到你的断点......

      3. 希望这可以节省你一些时间。

答案 10 :(得分:2)

如果项目路径包含空格,例如路径<path>\bin\Debug\New Project\Quotes.Domain.Tests.dll中的“新项目”随后包含“开始选项” - &gt;命令行参数以双引号显示项目路径。

我花了很多时间来解决这个问题。

答案 11 :(得分:2)

如果您能够使控制台/或GUI工作,但您的断点没有被击中,可能是因为您的应用运行的是与NUnit不同的.NET运行时。检查你的nunit-console.exe.config / nunit.exe.config是否指定了运行时。(这些配置与nunit exe的目录位于同一目录。)使用启动节点指定运行时:

<configuration>
    <startup>
       <supportedRuntime version="4.0" />
    </startup>

答案 12 :(得分:1)

关于Patrick McDonald先生所说的话

  

由于我的测试项目不是解决方案中的启动项目,我通过右键单击测试项目并选择Debug - &gt;来运行我的测试。启动新实例

我试图申请我的测试类库但是在路径上遇到了一些错误,所以我试图删除'命令行参数',幸运的是它运行良好并且符合预期。

答案 13 :(得分:0)

听起来你正在尝试使用错误的库。 NUnit只能在您使用的dll包含TestFixtures时启动。

TestDriven.Net上的

+1。我有机会多次使用它。 您可以根据http://testdriven.net/purchase_licenses.aspx的许可下载个人版本以进行评估。

答案 14 :(得分:0)

我和MSTest有同样的错误。我发现在测试输出窗口中,某些测试具有重复的ID,无法加载。我删除了所有重复的测试,现在我可以在启动项目时运行测试。

答案 15 :(得分:0)

现在还有一个扩展“Visual NUnit”,它允许您从Visual Studio中运行测试,就像构建测试框架句柄一样。在扩展管理器中查看它。

答案 16 :(得分:0)

打开Visual Studio ---&gt;你的项目---&gt;选择“属性”---&gt;选择“调试” - &gt;选择“启动外部程序”并在那里设置NUnit的路径(例如:启动外部程序= C:\ Program Files \ NUnit 2.6.2 \ bin \ nunit.exe)----&gt;保存

设置完成后,只需单击Debug

答案 17 :(得分:0)

对我来说,解决方案是适应nunit配置文件。要将nunit与4.5-.Net框架和x64构建选项一起使用,我必须在启动标记中添加一行(支持的运行时版本)。

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

之后,我可以通过右键单击Testproject Debug - &gt;开始。开始新实例。 在此之前,我需要再次手动将项目附加到流程中。

我的调试属性是, C:\ Program Files(x86)\ NUnit 2.6.4 \ bin \ nunit.exe 使用.dll的位置参数进行测试。

更多信息:nunit for testing with .NET 4.0

答案 18 :(得分:-1)

看看这有帮助.. How to add NUnit in Visual Studio

(RighteousRant)虽然我个人不喜欢这种方法..如果您在测试驱动代码时需要调试器,那就是“气味”,因为您没有足够的信心/知道如何你的代码工作&amp;需要调试器告诉你。如果做得好,TDD应该让你免于需要调试器。使用'将调试程序附加到NUNit'仅在极少数情况下或当您涉及其他人的代码时。