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?
Antworten
Zu viele Anzeigen?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.
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.
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!");
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.
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.
- See previous answers
- Weitere Antworten anzeigen
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/