Diviser par zéro et aucune erreur?

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.

Vue de la liste d'erreurs de VS2017

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)) { ... }