division zéro ne jette pas exception dans nunit
-
05-10-2019 - |
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?
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"));