【问题标题】:Debugging Nunit tests in Visual Studio C# Express 2010在 Visual Studio C# Express 2010 中调试 Nunit 测试
【发布时间】:2011-08-10 16:21:21
【问题描述】:

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

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

但是,我有几个测试可以执行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
    {

    }
}

【问题讨论】:

  • 我也想要这个问题的答案,下面的答案都不是。

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


【解决方案1】:

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

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

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

  • 在下拉框中选择“Common Language Runtime Exceptions”
  • 在编辑框中输入“NUnit.Framework.AssertionException”。
  • 单击OK 关闭“新建例外”对话框。
  • 返回“例外”对话框,确保两个复选框(Thrown User-unhandled)都未选中

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

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

【讨论】:

  • 这不起作用,因为当我正在测试的异常被抛出时调试器正在中断,而不是在断言失败时。就我而言,我得到的是NullReferenceException
  • @George Duckett:好的,现在我很困惑 ;-) 我明白了,你不想因为 NUnit 的 Assert.*() 操作失败而专门闯入调试器;这表现为NUnit.Framework.AssertionExceptions 被抛出。当然,这种情况下的“忽略”意味着不闯入调试器,程序当然会得到异常并按照它进行处理。如果你想做的好像那个异常从未发生过,我想你真的无能为力,除了一开始就不抛出它。
  • 对不起,我会尽力澄清。在我的测试中,我正在检查是否发生特定异常。当我使用我发现的方法调用 nunit 时,它会在我正在寻找的异常发生时中断。因为我实际上正在测试该异常的发生,所以我想忽略它以转移到我真正想要调试的测试。
  • 由于某种原因,它不会因任何 nunit 异常而中断,它会在此之前中断,当我的库被正确测试时会导致 ArgumentNullException,这就是我想忽略的。
  • 你不能简单地“取消选中”你不想想要破坏它的异常类型(但它们仍然会发生或当然)。我以为这是一个 AssertionException,但现在听起来是其他所有异常。
【解决方案2】:

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

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

您可以从这里选择要中断的异常

【讨论】:

  • 好主意,但是我不想在特定异常上不中断,如果它们是从 Assert.Throws 方法中抛出的,我不想中断。
【解决方案3】:

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

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

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

【讨论】:

    【解决方案4】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-19
      • 1970-01-01
      • 2011-07-03
      • 1970-01-01
      • 2011-03-26
      相关资源
      最近更新 更多