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

时间:2011-07-24 13:17:52

标签: c# unit-testing testing nunit

我在调试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);
        }
    }
}

接下来,我按照此链接中的建议进行操作 How do I run NUnit in debug mode from Visual Studio?但该主题中没有一个解决方案适合我。执行测试时没有遇到任何断点。我尝试通过附加到流程以及使用带参数的外部程序运行项目来测试解决方案。

我可以做些什么来调试我的单元测试?

5 个答案:

答案 0 :(得分:41)

直接使用Visual Studio

运行或调试NUnit测试

看看ma&#39;没有扩展!

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

step-by-step guide with images向您展示了如何操作。

  

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

答案 1 :(得分:13)

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

安装后

  1. 在测试方法中设置断点
  2. 右键单击并从“测试方式”菜单中选择“调试器”
  3. 调试器应该启动并点击断点
  4. 遗憾的是,您不能将此方法用于Visual Studio的Express版本,因为TestDriven.NET是Visual Studio的插件,Express版本不支持使用插件

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

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

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

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

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

答案 2 :(得分:5)

如果您使用的是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中显示任何断点或异常。

答案 3 :(得分:0)

看看NHarness on CodePlex

这是一个非常简单,基于反射的测试运行器库,可识别NUnit属性,可以从Visual Studio Express中的项目运行,允许进行调试测试。

它目前具有测试类级别的粒度,但据推测,方法级调用很快就会被添加。

答案 4 :(得分:0)

与NUnit 2.5.3有同样的问题,并最终找到了不同的解决方案。看看这是否适合你:

打开NUnit GUI并进入“工具”菜单“设置...”对话框。在Settings树中选择Test Loader部分的Assembly Isolation子部分。在NUnit进程中将Default Process Model设置为Dexctly。

我将它设置为在单个单独的进程中运行测试,这就是调试器无法将我测试的dll链接到用于调试它的符号的原因。我仍在使用每个程序集使用一个sperate AppDomain作为我的默认域使用。