除以零没有错误?
Divide by zero and no error?
只是拼凑了一个简单的测试,没有任何特殊原因,只是我喜欢尝试对我的所有方法进行测试,尽管这个方法非常简单,或者我是这么认为的。
[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);
}
正如您在测试方法中看到的那样,我正在除以零。问题是,它不会产生错误。请参阅下面显示的错误 window。
它给出的不是错误而是无穷大的值?我错过了什么?所以我用谷歌搜索,发现双精度数除以零不会产生错误,它们要么给出 null 要么给出无穷大。那么问题就变成了,如何测试 Infinity return 值?
只有在整数值:
的情况下,你才会有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
您可以像下面这样检查
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))
{
...
}
只是拼凑了一个简单的测试,没有任何特殊原因,只是我喜欢尝试对我的所有方法进行测试,尽管这个方法非常简单,或者我是这么认为的。
[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);
}
正如您在测试方法中看到的那样,我正在除以零。问题是,它不会产生错误。请参阅下面显示的错误 window。
它给出的不是错误而是无穷大的值?我错过了什么?所以我用谷歌搜索,发现双精度数除以零不会产生错误,它们要么给出 null 要么给出无穷大。那么问题就变成了,如何测试 Infinity return 值?
只有在整数值:
的情况下,你才会有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
您可以像下面这样检查
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))
{
...
}