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/

10voto

Jeff Yates Punkte 59874

Mit Assert können Sie behaupten, dass eine Bedingung (post oder pre) in Ihrem Code gilt. Auf diese Weise können Sie Ihre Absichten dokumentieren und sich vom Debugger in einem Dialog informieren lassen, wenn Ihre Absicht nicht erfüllt ist.

Im Gegensatz zu einem Haltepunkt gehört die Bestätigung zu Ihrem Code und kann verwendet werden, um zusätzliche Details über Ihre Absicht hinzuzufügen.

10voto

Ryan Punkte 9860

Assert kann Ihnen dabei helfen, das Meldeverhalten zwischen Test und Freigabe zu trennen. Zum Beispiel,

Debug.Assert(x > 2)

löst nur dann einen Abbruch aus, wenn Sie einen "Debug"-Build und keinen Release-Build verwenden. Es gibt ein vollständiges Beispiel für dieses Verhalten aquí

5voto

Knightlore Punkte 61

Assertions sind ein wichtiger Bestandteil von Design by Contract (DbC), das meines Wissens nach von Meyer, Bertand eingeführt/befürwortet wurde. 1997. Objektorientierte Software-Konstruktion.

Ein wichtiges Merkmal ist, dass sie keine Nebeneffekte erzeugen dürfen, z. B. können Sie eine Ausnahme behandeln oder mit einer if-Anweisung eine andere Vorgehensweise wählen (defensive Programmierung).

Assertions werden verwendet, um die Vor- und Nachbedingungen des Vertrages, der Kunden-/Lieferantenbeziehung zu überprüfen - der Kunde muss sicherstellen, dass die Vorbedingungen des Lieferanten erfüllt sind, z. B. er schickt £5 und der Lieferant muss sicherstellen, dass die Nachbedingungen erfüllt sind, z. B. er liefert 12 Rosen. (Nur eine einfache Erklärung von Kunde/Lieferant - kann weniger annehmen und mehr liefern, aber über Assertions). C# führt auch Trace.Assert() ein, das für die Freigabe von Code verwendet werden kann.

Um die Frage zu beantworten: Ja, sie sind immer noch nützlich, können aber die Komplexität und Lesbarkeit des Codes erhöhen und die Wartung erschweren. Sollten wir sie noch verwenden? Ja, Werden wir sie alle verwenden? Wahrscheinlich nicht, oder nicht in dem von Meyer beschriebenen Umfang.

(Sogar der OU-Java-Kurs, in dem ich diese Technik gelernt habe, zeigte nur einfache Beispiele und der Rest des Codes erzwang die DbC-Assertion-Regeln für den Großteil des Codes nicht, sondern es wurde davon ausgegangen, dass sie verwendet werden, um die Korrektheit des Programms zu gewährleisten!)

4voto

Flory Punkte 2811

Meiner Meinung nach ist Debug.Assert eine Möglichkeit, einen Vertrag darüber zu schließen, wie eine Methode aufgerufen werden soll, wobei der Schwerpunkt auf den Werten eines Parameters liegt (und nicht nur auf dem Typ). Wenn Sie beispielsweise keine Null im zweiten Parameter senden sollen, fügen Sie Assert um diesen Parameter herum hinzu, um dem Verbraucher mitzuteilen, dass er das nicht tun soll.

Es verhindert, dass jemand Ihren Code auf dumme Art und Weise verwendet. Aber es ermöglicht auch, dass diese Dummheit in die Produktion einfließt, ohne dass der Kunde eine unangenehme Nachricht erhält (vorausgesetzt, Sie erstellen einen Release-Build).

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