Assert dans le bloc Try..Catch est pris
Viens de tomber sur certains comportement intéressant - Assert
d'être pris par Catch
bloc.
List<Decimal> consArray = new List<decimal>();
try
{
Decimal d;
Assert.IsTrue(Decimal.TryParse(item.Value, out d));
consArray.Add(d);
}
catch (Exception e)
{
Console.WriteLine(item.Value);
Console.WriteLine(e);
}
Affirmer jette AssertFailedException
et de ses pêchés par catch
. Toujours pensé que si Assert
échoue, alors le test est manqué et consécutives, l'exécution est annulée. Mais dans ce cas - test se déplace le long. Si rien de mal se passe plus tard - je obtenir vert test! Dans la théorie c'est bon comportement?
Édité: je comprends que c'est peut-être .NET de restriction et de la façon dont les assertions sont réalisés dans MsTest. Affirmer throws exception. Depuis catch
- attrape tout ce qu'il attrape affirmer exception. Mais est-il bon en théorie ou MsTest spécifique?
OriginalL'auteur nikita | 2013-02-15
Vous devez vous connecter pour publier un commentaire.
NUnit
permettra de faire exactement la même chose. Comme devrait l'être toute autre framework de test je pense, mais je ne connaisMStest
etNUnit
en C#.J'ai attendez que votre code de test ne serait pas contenir
Decimal.TryParse
, mais votre logique métier serait de le faire, que vous auriez test avec un objet et un appel de méthode.Quelque chose comme:
Afin de rester un peu plus près de votre mise en œuvre:
De toute façon, pour répondre à votre question. Le try-catch est censé attraper votre
AssertFailedException
.PS: Capture de la
AsserFailedException
et re-jeter, mais il se sent un peu étrange pour moi. J'avais cherchent à quitter leAssert
s en dehors de toutetry-catch
blocs. Mais que peut-être juste mon avis qui vous n'avez pas à demander :).Ah désolé pensais que vous parliez de c# framework. Java est un tout à l'heure, mais assez sûr il en fait de même. Astuce: mise à jour de la question avec les infos que java, PHP, etc est-ce qui vous intéresse. Gl avec votre réponse et bon codage 🙂
OriginalL'auteur bas
Comme déjà répondu, c'est le comportement correct. Vous pouvez modifier votre code pour obtenir Votre comportement attendu par la capture de l'AssertFailedException et re-jeter.
OriginalL'auteur Peter Henell
Votre code fonctionne comme prévu. Lorsqu'un
Assert
échoue, elle renvoie une AssertFailedException quihérite de Exception. Ainsi, vous pouvez ajouter un
try-catch
et de l'attraper.Dans votre cas, ajouter un
throw
à la fin de lacatch
et re-lancer l'exception.Cela n'a rien à voir avec le TDD, ni MsTest.
Assert
est pas n'importe quel type de membre spécial - c'est juste un class comme tous les autres. Tous les cadres de travail exactement de la même manière. Sur une note, vous ne devriez pas vraiment être à l'aide detry-catch
niConsole.WriteLine
dans votre unité de test.Pourquoi ne pas
Console.Writeline
? Vraiment à m'intéresser..Parce que votre test cadre de la sortie de la console de toute façon. Un test en échec donnera stacktrace dans cmd ou IDE. De plus, affirme permettre à d'autres de texte que j'ai essayé de photo dans mon exemple dans ma réponse
OriginalL'auteur chaliasos