Question

L'exécution du code C # grâce à des rendements NUnit

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

soit pas DivideByZeroException est jeté, ou NUnit ne se coince pas. Semblable à cette question , mais les réponses qu'il a obtenues, faire semble pas fonctionner pour moi. Ce 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"));
    }

Toutes les idées?

Était-ce utile?

La solution

exception Non est levée. 1 / 0.0 sera vous donner double.PositiveInfinity. C'est ce que l'IEEE 754 spécifie standard, C # (et essentiellement tous les autres systèmes) suit.

Si vous voulez une exception dans flottante code division point, vérifiez zéro explicitement, et jetez-le vous-même. Si vous voulez juste voir ce que DivideByZeroException vous obtiendrez, soit le jeter manuellement ou entiers diviser par zéro entier.

Autres conseils

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 entiers (int etc) ou decimal. double ne jette pas une exception ici, même dans un contexte de checked. Vous obtenez juste + INF.

Si vous voulez évaluer les mathématiques intégrale (et obtenir l'exception), utilisez:

var a = (1 / int.Parse("0"));
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top