2010-05-31 30 views
8

Exécution du code C# suivant grâce à des rendements NUnitdivision zéro ne jette pas exception dans nunit

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

Donc, soit pas DivideByZeroException est jeté, ou NUnit ne se coince pas. Semblable à this question, mais les réponses qu'il a obtenu, ne semblent pas fonctionner pour moi. Cela utilise NUnit 2.5.5.10112 et .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")); 
    } 

Des idées?

+1

Essayez Int32.Parse ("0") au lieu de Double.Parse ("0") – Joe

+0

Les gars Merci. C'était rapide. Mec, je le savais, mais parfois tu ne relies pas les points. – Boris

Répondre

21

Aucune exception n'est levée. 1/0.0 vous donnera juste double.PositiveInfinity. C'est ce que spécifie la norme IEEE 754, que C# (et fondamentalement tous les autres systèmes) suit.

Si vous voulez une exception dans le code de division à virgule flottante, vérifiez zéro explicitement et lancez-le vous-même. Si vous voulez juste voir ce que DivideByZeroException vous apportera, lancez-le manuellement ou divisez les entiers par zéro entier.

+0

Merci, c'était ça, bien sûr. – Boris

7

De MSDN:

Exception levée lors d'une tentative de diviser une valeur intégrale ou décimal par zéro.

Vous avez affaire à double, aucun des types intégraux (int etc.) ou decimal. double ne lève pas d'exception ici, même dans un contexte checked. Vous venez d'obtenir + INF.

Si vous voulez évaluer les mathématiques comme faisant partie intégrante (et obtenir l'exception), utilisez:

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

Aussi quelques informations générales (pas. NET spécifique) sur Wikipedia concernant la division par zéro dans la norme à virgule flottante IEEE. http://en.wikipedia.org/wiki/Division_by_zero#In_computer_arithmetic – Josh