在Visual Studio C#Express 2010中调试Nunit测试

时间:2011-08-04 14:59:30

标签: c# debugging nunit visual-studio-express

我已按照此建议调试NUnit测试。

http://www.blackwasp.co.uk/NUnitCSharpExpress.aspx

但是,我有几个Assert.Throws<...>的测试,这会导致调试器在我正在测试的异常发生时中断,而实际上我希望它在这些调用之外发生异常时中断。 / p>

如何让调试器忽略这些方法中引起的异常?


编辑:我的事件尝试了以下,这不起作用!

[Test]
public void InstanciatingWithNullParameterThrowsException()
{
    try
    {
        Assert.Throws<ArgumentNullException>(() => new CachedStreamingEnumerable<int>(null));
        // This still throws and stops be being able to debug tests called after this one
    }
    catch
    {

    }
}

4 个答案:

答案 0 :(得分:4)

这对我有用(虽然在Visual Studio Professional中,不是Express,但我想这应该不重要)。

  • 按照Ninjapig的建议打开“例外”对话框。

  • 点击Add...按钮,打开“新例外”对话框。

  • 在下拉框中选择“公共语言运行时例外”
  • 在编辑框中输入“NUnit.Framework.AssertionException”。
  • 点击OK关闭“新例外”对话框。
  • 返回“例外”对话框,确保两个复选框(Thrown User-unhandled未选中

现在,调试器应该完全忽略NUnit断言失败(即抛出,捕获与否,NUnit.Framework.AssertionException)。

UPDATE :这只会阻止进入调试器,它不能忽略异常本身;即它不会改变实际的程序流程。在更改或替换或封装try-catch块中的Assert-calls时,我认为没有任何东西可以实现(至少不会自动)。

答案 1 :(得分:0)

我不确定VS2010 Express是否有此选项,但你可以选择中断例外。

转到“调试”菜单,然后选择“例外” Menu options

从这里你可以选择要打破的例外情况 Exceptions selection window

答案 2 :(得分:0)

我最终引用nunit-gui-runner.dll并像

一样调用它
NUnit.Gui.AppEntry.Main(new string[] { Dll });

这会带来NUnit gui。然后,我可以运行我感兴趣的特定测试。

答案 3 :(得分:0)

我遇到了同样的问题。虽然您的原始方法(不需要try...catch块)适用于大多数异常类型,但ArgumentNullException不起作用。我这样修好了:

[Test]
public void InstanciatingWithNullParameterThrowsException()
{
    bool isArgumentNullExceptionThrown = false;
    try
    {
       new CachedStreamingEnumerable<int>(null);
    }
    catch (ArgumentNullException)
    {
        isArgumentNullExceptionThrown = true;
    }
    Assert.That(isArgumentNullExceptionThrown);
}

它并不优雅,但似乎确实有用。