2011-08-04 222 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); 
} 

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