Нулевое разделение не бросает исключение в NUNIT
-
05-10-2019 - |
Вопрос
Запуск следующего C # Code через NUNIT DAYET
Test.ControllerTest.TestSanity: Expected: `<System.DivideByZeroException>` But was: null
Таким образом, ни один развернутыйЗемозеприeException не брошен, или Nunit не поймает его. Похожий на это Вопрос, но ответы, которые он получил, не кажется, не работает для меня. Это использует NUNIT 2.5.5.10112 и .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"));
}
Есть идеи?
Решение
Никакое исключение не брошено. 1 / 0.0 просто даст вам двойной. Попозитивность. Это то, что указано стандарт IEEE 754, который содержит C # (и в основном любую другую систему).
Если вы хотите исключение в коде подразделения с плавающей точкой, проверьте нулевой явном и бросьте его сами. Если вы просто хотите посмотреть, что DividebyzeroException вы получите вам, либо бросит его вручную или разделите целые числа целыми числами.
Другие советы
От MSDN:
Исключение, которое брошено, когда есть попытка разделить интегральное или десятичное значение на ноль.
Вы имеете дело с double,
не любой из неотъемлемых типов (int
и т. д.) или decimal
. double
не бросает здесь исключение, даже в checked
контекст. Вы просто получаете + инф.
Если вы хотите оценить как интегральную математику (и получить исключение), используйте:
var a = (1 / int.Parse("0"));