Выполнение следующего C# кодирует через урожаи NUnit
Test.ControllerTest.TestSanity: Expected: `` But was: null
Так или никакой DivideByZeroException не брошен, или NUnit не ловит его. Подобный этому вопросу, но ответам он добрался, кажись, не работать на меня. Это использует NUnit 2.5.5.10112 и.NET 4.0.30319.
[Test]
public void TestSanity()
{
Assert.Throws(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"));
}
Какие-либо идеи?
Исключение не выбрасывается. 1 / 0.0 просто даст вам double.PositiveInfinity. Это то, что определяет стандарт IEEE 754, которому следует C# (и практически каждая другая система).
Если вы хотите получить исключение в коде деления с плавающей запятой, проверьте нуль явно и бросьте его сами. Если вы просто хотите посмотреть, что даст вам исключение DivideByZeroException, либо бросьте его вручную, либо делите целые числа на целый ноль.
Из MSDN:
Исключение, которое возникает при попытке разделить интеграл или десятичное значение на ноль.
Вы имеете дело с double,
а не с любым из интегральных типов (int
и т.д.) или decimal
. double
не вызывает исключения даже в контексте checked
. Вы просто получаете +INF.
Если вы хотите оценить как интегральную математику (и получить исключение), используйте:
var a = (1 / int.Parse("0"));