Je viens juste de rassembler un test simple, pas pour une raison particulière autre que j’aime essayer d’avoir des tests pour toutes mes méthodes, même si celle-ci est assez simple, ou alors j’ai pensé.
[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 voir dans la méthode de test, je suis en divisant 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, il donne une valeur d’infini? Qu’est-ce qui me manque? Alors j’ai googlé et trouvé que les doubles divisés par zéro NE génèrent PAS une erreur qu’ils donnent soit nul ou infini. La question devient alors, comment on teste une valeur de retour Infinity?
Vous allez avoir DivideByZeroException
uniquement en cas de valeurs entières :
int total = 3; int numberOf = 0; var tot = total / numberOf; // DivideByZeroException thrown
Si au moins un argument est une valeur à virgule flottante ( double
dans la question), vous obtiendrez FloatingPointType.PositiveInfinity ( double.PositiveInfinity
dans le contexte) et aucune 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)) { ... }