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

C# 在Visual Studio C Express 2010中调试Nunit测试,c#,debugging,nunit,visual-studio-express,C#,Debugging,Nunit,Visual Studio Express,我已经按照这个建议为NUnit测试进行了调试 但是,我有几个测试可以执行Assert.Throws,这会在我测试的异常发生时导致调试器中断,而如果在这些调用之外发生异常,我真的希望调试器中断 如何让调试器忽略这些方法中引起的异常 编辑:我尝试了下面的事件,但不起作用 [Test] public void InstanciatingWithNullParameterThrowsException() { try { Assert.Throws<Argument

我已经按照这个建议为NUnit测试进行了调试

但是,我有几个测试可以执行Assert.Throws,这会在我测试的异常发生时导致调试器中断,而如果在这些调用之外发生异常,我真的希望调试器中断

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

编辑:我尝试了下面的事件,但不起作用

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

    }
}

我不确定VS2010 Express是否有此选项,但您可以选择例外情况来打开

转到“调试”菜单,然后选择“异常”

从这里您可以选择要中断的异常
以下是我在VisualStudio Professional中工作过的东西,不是Express,但我想这不重要

按照Ninjapig的建议打开异常对话框

点击添加。。。按钮,以打开“新建异常”对话框

在下拉框中选择公共语言运行时异常 在编辑框中,输入NUnit.Framework.AssertionException。 单击“确定”关闭“新建异常”对话框。 返回异常对话框,确保未选中抛出的复选框和用户未处理的复选框。 现在,调试器应该完全忽略NUnit断言失败,即抛出、捕获或不捕获NUnit.Framework.AssertionException

更新:这只会防止闯入调试器,它不能忽略异常本身;i、 e.它不会改变实际的程序流程。从更改、替换或封装try-catch块中的断言调用来看,我不认为有任何东西可以实现这一点,至少不是自动实现的

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

NUnit.Gui.AppEntry.Main(new string[] { Dll });

这将打开NUnit gui。然后我可以运行我感兴趣的特定测试。

我也遇到了同样的问题。虽然您最初的方法不需要try…catch块,但对于大多数异常类型都有效,ArgumentNullException不起作用。我是这样修复的:

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

它没有那么优雅,但似乎确实有效。

好主意,但是我不想在特定异常上中断,我不想在从Assert.Throws方法中抛出异常时中断。这不起作用,因为当抛出我测试的异常时,调试器正在中断,而不是在Assert失败时。在我的情况下,我得到的是一个空引用异常。@George Duckett:好吧,现在我很困惑;-我明白,您不希望因为NUnit的Assert.*操作失败而专门闯入调试器;其自身表现为正在抛出的NUnit.Framework.assertionException。当然,在这种情况下,ignore意味着不闯入调试器,程序当然会得到异常并根据它进行处理。如果你想把这件事当作从未发生过,我想你真的无能为力,除了一开始就不把它扔出去。对不起,我会尽力澄清的。在我的测试中,我检查是否发生了特定的异常。当我使用方法调用nunit时,我发现当我正在寻找的异常发生时,它会中断。因为我实际上是在测试该异常的发生情况,所以我想忽略它,转到我真正想要调试的测试。由于某种原因,它不会在任何nunit异常上中断,它会在此之前中断,当我的库被正确测试时,会导致ArgumentNullException,这就是我想忽略的。你不能简单地取消选中那些你不想破坏它的异常类型,但它们仍然会发生或发生。我原以为这是一个断言例外,但现在听起来它是所有其他的。我也想知道这个问题的答案,下面的答案都不是。