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?

È stato utile?

Soluzione

è gettato

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"));
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top