2011-08-04 46 views
7

我按照这个建议来调试NUnit测试。在Visual Studio中调试Nunit测试C#Express 2010

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 
    { 

    } 
} 
+2

我也想回答这个问题,下面没有一个答案是。 –

回答

4

这里打破什么例外是为我工作(尽管在Visual Studio Professional,不是Express,但我想这应该不重要)。

  • 按照Ninjapig的建议调出“例外”对话框。

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

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

现在,调试器应该完全忽略一个NUnit断言失败(即抛出,被捕获或没有,NUnit.Framework.AssertionException)。

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

+1

当我测试的异常被抛出时,这不起作用,因为调试器正在中断,而不是断言失败。在我的情况下,这是一个'NullReferenceException'我越来越。 –

+0

@George Duckett:好的,现在我很困惑;-)我明白了,你要特别不要因为NUnit的Assert。*()操作失败而进入调试器。它们表现为引发'NUnit.Framework.AssertionException'。当然,在这种情况下,“忽略”意味着不会打入调试器,程序当然会得到异常并按照它执行。如果你想要像那样的例外从来没有发生过,我想没有什么事情可以做,除非不把它放在第一位。 –

+0

对不起,我会尽力澄清。在我的测试中,我正在检查是否发生特定的异常。当我使用方法调用nunit时,我发现它发生故障时,我正在寻找的异常发生。因为我实际上正在测试那个异常的发生,所以我想忽略它以转移到我实际想要调试的测试上。 –

0

我不确定如果VS2010 Express有这个选项,但你可以选择例外打破。

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

,从这里,你可以选择在 Exceptions selection window

+0

不错的主意,但是我不想打破特定的例外情况,如果它们是从'Assert.Throws'方法中抛出的,我不想打破。 –

0

我已经结束了引用nunit-gui-runner.dll并调用它像

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

这带来了NUnit的GUI。然后我可以运行我感兴趣的具体测试。

0

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

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

它不是很优雅,但它似乎工作。