単純なテストをまとめただけで、特定の理由ではなく、すべてのメソッドのテストを行うのが好きです。
[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);
}
テスト方法でわかるように、私はゼロで除算しています。問題は、エラーを生成しないことです。以下のエラーウィンドウの表示を参照してください。
エラーの代わりに、無限の値を与えていますか?何が欠けているのでしょうか?グーグルで調べたところ、ダブルをゼロで除算すると、nullまたは無限大を与えるエラーが生成されませんでした。問題は、Infinityの戻り値をどのようにテストするかです。
整数値の場合にのみDivideByZeroException
を使用します。
int total = 3;
int numberOf = 0;
var tot = total / numberOf; // DivideByZeroException thrown
少なくとも1つの引数が浮動小数点値(問題の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))
{
...
}