Ich bin gerade auf ein interessantes Verhalten gestoßen - Assert
wurde von Catch
block abgefangen.
Assert gibt AssertFailedException
und es wird von catch
abgefangen. Ich dachte immer, dass, wenn Assert
fehlschlägt, der Test fehlgeschlagen ist und die fortlaufende Ausführung abgebrochen wird. Aber in diesem Fall - Test bewegt sich mit. Wenn später nichts Falsches passiert, bekomme ich grün Test! In der Theorie - ist es richtiges Verhalten?
Bearbeitet: Ich verstehe, dass es vielleicht .NET-Beschränkungen gibt und wie Behauptungen in MsTest gemacht werden. Assert löst die Ausnahme aus. Da catch
- alles abfängt, fängt es assert Ausnahme. Aber ist es in Theorie oder MsTest spezifisch?
NUnit
wird genau dasselbe tun. Wie bei jedem anderen Testframework auch, aber ich kenne nur MStest
und NUnit
in C #.
Ich würde erwarten, dass Ihr Testcode nicht Decimal.TryParse
enthält, aber Ihre Geschäftslogik würde das tun, was Sie mit einem Objekt und einem Methodenaufruf testen würden.
Etwas wie:
%Vor%Um Ihrer Implementierung ein wenig näher zu sein:
%Vor% Wie auch immer, um deine Frage zu beantworten. Der try-catch soll dein AssertFailedException
fangen.
PS: Den AsserFailedException
einzufangen und ihn erneut zu werfen, wird auch funktionieren, aber es fühlt sich ein bisschen komisch an. Ich würde mich bemühen, die Assert
s außerhalb aller try-catch
Blöcke zu belassen. Aber das könnte nur meine Meinung sein, nach der du nicht gefragt hast:).
Wie bereits beantwortet, ist das korrektes Verhalten. Sie können Ihren Code ändern, um Ihr erwartetes Verhalten zu erhalten, indem Sie die AssertFailedException abfangen und erneut werfen.
%Vor% Ihr Code funktioniert wie erwartet. Wenn ein Assert
fehlschlägt, wird ein AssertFailedException was
erbt von Ausnahme . Sie können also try-catch
hinzufügen und abfangen.
Fügen Sie in Ihrem Fall throw
am Ende von catch
hinzu und werfen Sie die Ausnahme erneut.
Tags und Links c# unit-testing mstest assert