Разделить на ноль и нет ошибки?
Просто скомпилировал простой тест, а не по какой-либо конкретной причине, кроме как мне хотелось попробовать тесты для всех моих методов, хотя это довольно просто, или так я думал.
[TestMethod]
public void Test_GetToolRating()
{
var rating = GetToolRating(45.5, 0);
Assert.IsNotNull(rating);
}
private static ToolRating GetToolRating(double total, int numberOf)
{
var ratingNumber = 0.0;
try
{
var tot = total / numberOf;
ratingNumber = Math.Round(tot, 2);
}
catch (Exception ex)
{
var errorMessage = ex.Message;
//log error here
//var logger = new Logger();
//logger.Log(errorMessage);
}
return GetToolRatingLevel(ratingNumber);
}
Как вы можете видеть в методе тестирования, я разделяю на ноль. Проблема в том, что она не генерирует ошибку. См. Экран окна ошибок ниже.
![Просмотр списка ошибок из VS2017]()
Вместо ошибки он дает значение бесконечности? Что я пропущу? Поэтому я искал googled и обнаружил, что удвоения, деленные на ноль, НЕ генерируют ошибку, они либо дают нуль, либо бесконечность. Тогда возникает вопрос, как один тест для возвращаемого значения Infinity?
Ответы
Ответ 1
У вас будет DivideByZeroException
только в случае целых значений:
int total = 3;
int numberOf = 0;
var tot = total / numberOf; // DivideByZeroException thrown
Если хотя бы один аргумент представляет собой значение с плавающей запятой (double
в вопросе), в результате вы получите FloatingPointType.PositiveInfinity(double.PositiveInfinity
в контексте) и исключение
double total = 3.0;
int numberOf = 0;
var tot = total / numberOf; // tot is double, tot == double.PositiveInfinity
Ответ 2
Вы можете проверить, как ниже
double total = 10.0;
double numberOf = 0.0;
var tot = total / numberOf;
// check for IsInfinity, IsPositiveInfinity,
// IsNegativeInfinity separately and take action appropriately if need be
if (double.IsInfinity(tot) ||
double.IsPositiveInfinity(tot) ||
double.IsNegativeInfinity(tot))
{
...
}