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?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.
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!)
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).
- 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/