Assert in Try..Catch Block wird abgefangen

8

Ich bin gerade auf ein interessantes Verhalten gestoßen - Assert wurde von Catch block abgefangen.

%Vor%

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?

    
nikita 15.02.2013, 06:20
quelle

3 Antworten

4

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:).

    
bas 15.02.2013, 09:27
quelle
6

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%     
Peter Henell 15.02.2013 09:48
quelle
5

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.

    
Schaliasos 15.02.2013 07:14
quelle

Tags und Links