如何在Visual Studio 2010中调试Nunit测试

com*_*ndo 20 c# testing nunit unit-testing

我在调试VisualStudio的NUnit测试时遇到问题.我创建了一个空项目(控制台应用程序),然后我添加了对NUnit库的引用并编写了一个简单的测试.

namespace ReimplementingLinq.Tests
{
    [TestFixture]
    public class WhereTest
    {
        [Test]
        public void SimpleFiltering()
        {
            int[] source = { 1, 2, 3, 4, 2, 8, 1 };
            var result = source.Where(val => val < 4);
            int[] expected = {1,2,3,4};
            CollectionAssert.AreEqual(expected, result);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

接下来我遵循此链接中给出的建议 如何从Visual Studio以调试模式运行NUnit?但是那个主题的解决方案都不适合我.执行测试时没有遇到任何断点.我尝试通过附加到流程以及使用带参数的外部程序运行项目来测试解决方案.

我该怎么做才能调试我的单元测试?

Rob*_*nik 41

直接使用Visual Studio运行或调试NUnit测试

看马'没有扩展名!

只需配置您的测试项目,以便在按F5(开始调试)或Ctrl-F5(无需调试时启动)时,它将自动启动NUnit GUI并执行其中的所有测试.如果遇到任何断点,您也可以简单地调试测试代码.

一个一步一步的指导与图像显示你到底如何做到这一点.

懒惰是所有发明的母亲 :-)

  • 谢谢!我在nunit.exe.config中缺少supportedRuntime元素. (3认同)
  • 由于我不能使用TestDriven.NET,这是一个了不起的解决方案.谢谢 (2认同)
  • 这应该是选定的答案. (2认同)

Cri*_*urf 13

假设您使用的是Visual Studio以外的Visual Studio版本,则可能会使用TestDriven.NET.

安装后

  1. 在测试方法中设置断点
  2. 右键单击并从Test With菜单中选择Debugger
  3. 调试器应该启动并命中你的断点

遗憾的是,您不能将此方法用于Visual Studio的Express版本,因为TestDriven.NET是Visual Studio的插件,而Express版本不支持使用插件

在控制台应用程序中运行测试

您还可以通过控制台应用程序在调试器中运行测试:

  1. 创建一个新的控制台应用程
  2. 参考您的单元测试项目
  3. 在控制台应用程序的Main方法内部,创建测试fixuture的新实例,然后调用其中一个测试方法.例如,如果我有一个名为MyTests的夹具和一个名为Test1的测试,我会写:

    var myTests = new MyTests();
    myTests.Test1();
    
    Run Code Online (Sandbox Code Playgroud)
  4. 在创建MyTests类实例的行上设置断点,然后按F5

  5. 调试器将命中你的断点,然后你可以使用F11进入你的TestFixture的构造函数,或者将其转入测试本身

  • @erict你可以澄清一下你的理由吗?OP询问"我该怎么做才能调试我的单元测试???" 讨论的两种方法都将导致在Visual Studio调试器中按照问题标题执行NUnit测试.测试本身仍然像往常一样使用NUnit框架,所以我不确定你的意思,因为上面的解决方案仍然使用NUnit. (3认同)

Sco*_*ain 5

如果您使用的是NUnit 2.4,则可以在您的SetUpFixture课程中输入以下代码.(您可以使用旧版本执行此操作,但您需要执行与之相关的任何等效操作SetUpFixture,或将其复制到测试本身.)

[SetUpFixture]
public class SetupFixtureClass
{
    [SetUp]
    public void StartTesting()
    {
        System.Diagnostics.Debugger.Launch();
    }
}
Run Code Online (Sandbox Code Playgroud)

Debugger.Launch()当您单击NUnit中的"运行"时,导致以下对话框显示的原因是什么.

JIT调试器对话框

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