193 Stimmen

C# - Was bewirkt die Methode Assert()? Ist sie noch nützlich?

Ich debugge mit Haltepunkten und erkenne den Assert-Aufruf? Ich dachte, er sei nur für Unit-Tests gedacht. Wozu dient er mehr als ein Haltepunkt? Da ich Haltepunkte setzen kann, warum sollte ich Assert verwenden?

12 Stimmen

Übrigens, wenn Sie sich für Asserts interessieren, sollten Sie sich unbedingt mit Code-Verträge .

0 Stimmen

Mögliches Duplikat von stackoverflow.com/questions/129120/

240voto

Patrick Desjardins Punkte 130529

Bei einer Debug-Kompilierung, Assert nimmt eine boolesche Bedingung als Parameter an und zeigt den Fehlerdialog an, wenn die Bedingung falsch ist. Das Programm wird ohne Unterbrechung fortgesetzt, wenn die Bedingung wahr ist.

Wenn Sie in Release kompilieren, werden alle Debug.Assert werden automatisch ausgelassen.

111voto

juan Punkte 76994

から Code vollständig

8 Defensive Programmierung

8.2 Behauptungen

Eine Assertion ist Code, der während der Entwicklung verwendet wird - in der Regel eine Routine oder Makro, der es einem Programm ermöglicht, sich selbst zu überprüfen, während es läuft. Wenn eine Behauptung wahr ist, bedeutet das, dass alles wie erwartet funktioniert. Wenn sie falsch ist, bedeutet das, dass sie einen unerwarteten Fehler im Code. Wenn das System zum Beispiel annimmt, dass eine Kundeninformationsdatei Datei nie mehr als 50.000 Datensätze haben wird, könnte das Programm eine Behauptung enthalten, dass die Anzahl der Datensätze kleiner als oder gleich 50.000 ist. Solange die Anzahl der Datensätze kleiner oder gleich 50.000 ist, wird die Behauptung schweigen. Wenn sie jedoch auf mehr als 50.000 Datensätze, wird sie jedoch lautstark "behaupten", dass ein Fehler im Programm vorliegt.

Assertions sind besonders nützlich in großen, komplizierten Programmen und in Programmen mit hoher Zuverlässigkeit. Sie ermöglichen es Programmierern, schneller nicht übereinstimmende Schnittstellenannahmen, Fehler, die sich beim Ändern des Codes einschleichen, usw. schneller zu beseitigen.

Eine Behauptung hat normalerweise zwei Argumente: einen booleschen Ausdruck, der der die Annahme beschreibt, die wahr sein soll, und eine Meldung, die angezeigt wird, wenn sie nicht wahr ist.

( )

Normalerweise möchten Sie nicht, dass die Benutzer Behauptungsmeldungen in Produktionscode sehen; Assertions sind in erster Linie für die Entwicklung und Wartung. Assertions werden normalerweise in den Code kompiliert bei Entwicklungszeit in den Code kompiliert und für die Produktion aus dem Code herauskompiliert. Während Entwicklung werden widersprüchliche Annahmen durch Assertions beseitigt, unerwartete Bedingungen, fehlerhafte Werte, die an Routinen übergeben werden, und so weiter. Während der Produktion werden sie aus dem Code herauskompiliert, so dass die Behauptungen die Systemleistung nicht beeinträchtigen.

43voto

thelsdj Punkte 8804

Sie sollten es verwenden, wenn Sie nicht jede kleine Codezeile mit einem Haltepunkt versehen wollen, um Variablen zu überprüfen, aber Sie wollen eine Art von Feedback erhalten, wenn bestimmte Situationen vorliegen:

Debug.Assert(someObject != null, "someObject is null! this could totally be a bug!");

18voto

Joe Punkte 117971

Assert gibt Ihnen auch eine weitere Gelegenheit, sich über Microsofts Fähigkeiten im UI-Design lustig zu machen. Ich meine: ein Dialog mit den drei Schaltflächen Abbrechen, Wiederholen, Ignorieren und einer Erklärung, wie sie zu interpretieren sind, in der Titelleiste!

15voto

Serge Voloshenko Punkte 3089

Zuallererst Assert() Methode ist verfügbar für Trace y Debug Klassen.
Debug.Assert() wird nur im Debug-Modus ausgeführt.
Trace.Assert() wird im Debug- und Freigabemodus ausgeführt.

Hier ist ein Beispiel:

        int i = 1 + 3;
        // Debug.Assert method in Debug mode fails, since i == 4
        Debug.Assert(i == 3);
        Debug.WriteLine(i == 3, "i is equal to 3");

        // Trace.Assert method in Release mode is not failing.
        Trace.Assert(i == 4);
        Trace.WriteLine(i == 4, "i is equla to 4");

        Console.WriteLine("Press a key to continue...");
        Console.ReadLine();

Führen Sie diesen Code im Debug-Modus und dann im Release-Modus aus.

enter image description here

Sie werden feststellen, dass Ihr Code im Debug-Modus Debug.Assert Anweisung fehlschlägt, erhalten Sie ein Meldungsfenster, das den aktuellen Stack-Trace der Anwendung anzeigt. Dies geschieht nicht im Release-Modus, da Trace.Assert() Bedingung ist wahr (i == 4) .

WriteLine() Methode gibt Ihnen lediglich die Möglichkeit, die Informationen in der Visual Studio-Ausgabe zu protokollieren. enter image description here

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X