divisione per zero non genera un'eccezione in NUnit
-
05-10-2019 - |
Domanda
L'esecuzione del seguente codice C # con rendimenti NUnit
Test.ControllerTest.TestSanity: Expected: `<System.DivideByZeroException>` But was: null
Quindi, o non DivideByZeroException è gettato, o NUnit non prenderlo. Simile a questa domanda , ma le risposte che ricevuti, fare non sembra funzionare per me. Questo sta usando NUnit 2.5.5.10112, e .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"));
}
Tutte le idee?
Soluzione
Non fa eccezione. 1 / 0.0 sarà solo darvi double.PositiveInfinity. Questo è ciò che previsto dalla norma IEEE 754, che C # (e praticamente ogni altro sistema) segue.
Se si vuole un'eccezione in virgola mobile Code Division, controllare per lo zero in modo esplicito, e lanciare da soli. Se si desidera solo per vedere cosa DivideByZeroException si arriva, o buttarlo manualmente o dividere numeri interi intero zero.
Altri suggerimenti
MSDN :
L'eccezione generata quando si tenta di dividere un valore integrale o decimale da zero.
Avete a che fare con double,
non uno qualsiasi dei tipi integrali (int
ecc) o decimal
. double
non un'eccezione qui, anche in un contesto checked
. Basta avere + INF.
Se si vuole valutare come la matematica integrale (e ottenere l'eccezione), utilizzare:
var a = (1 / int.Parse("0"));