Je viens de lancer un test simple, pas pour une raison particulière, sinon j'aime essayer d'avoir des tests pour toutes mes méthodes, même si celle-ci est assez simple, du moins le pensais-je.
[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);
}
Comme vous pouvez le constater dans la méthode de test, je divise par zéro. Le problème est que cela ne génère pas d'erreur. Voir la fenêtre d'erreur ci-dessous.
Au lieu d’une erreur, c’est donner une valeur d’infini? Donc, j'ai googlé et trouvé que les doubles divisés par zéro NE génèrent pas d'erreur, qu'ils donnent soit nul soit l'infini. La question devient alors, comment peut-on tester une valeur de retour Infinity?
Vous n'utiliserez DivideByZeroException
que dans le cas où valeurs entières:
int total = 3;
int numberOf = 0;
var tot = total / numberOf; // DivideByZeroException thrown
Si au moins un argument est un virgule flottante valeur (double
dans la question), vous aurez FloatingPointType.PositiveInfinity comme résultat (double.PositiveInfinity
_ dans le contexte) et sans exception
double total = 3.0;
int numberOf = 0;
var tot = total / numberOf; // tot is double, tot == double.PositiveInfinity
Vous pouvez vérifier comme ci-dessous
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))
{
...
}