2010-05-31 47 views
8

拋出異常運行下面的C#代碼通過NUnit的產生零分工不NUnit的

Test.ControllerTest.TestSanity: Expected: `<System.DivideByZeroException>` But was: null 

所以要麼沒有DivideByZeroException被拋出,或NUnit的不抓住它。類似於this的問題,但他得到的答案,似乎並不適合我。這是使用NUnit 2.5.5.10112和.NET 4.0.30319。

[Test] 
    public void TestSanity() 
    { 
     Assert.Throws<DivideByZeroException>(new TestDelegate(() => DivideByZero())); 
    } 

    private void DivideByZero() 
    { 
     // Parse "0" to make sure to get an error at run time, not compile time. 
     var a = (1/Double.Parse("0")); 
    } 

任何想法?

+1

嘗試Int32.Parse( 「0」)的Double.Parse代替( 「0」) – Joe 2010-05-31 19:50:48

+0

謝謝你們。那很快。男人,我知道這一點,但有時你只是不把點連接起來。 – Boris 2010-05-31 20:07:21

回答

21

不引發任何異常。 1/0.0只會給你double.PositiveInfinity。這正是IEEE 754標準所規定的,C#(以及基本上所有其他系統)遵循的。

如果您想要浮點除法代碼中的異常,請明確檢查零並自行拋出。如果你只是想看看DivideByZeroException會給你帶來什麼,可以手動拋出或用整數零除整數。

+0

謝謝,就是這樣,當然。 – Boris 2010-05-31 20:08:15

7

MSDN

時,拋出時,有被零除整或十進制值企圖的異常。

你正在處理double,沒有任何整型(int等)或decimal的。 double在這裏不會引發異常,即使在checked上下文中也是如此。你只需要+ INF。

如果你要評估爲整體數學(並獲得除外),使用:

var a = (1/int.Parse("0")); 
+1

維基百科關於IEEE浮點標準除零的一些一般信息(不是.NET特定的)。 http://en.wikipedia.org/wiki/Division_by_zero#In_computer_arithmetic – Josh 2010-05-31 19:57:11