Kürzlich bin ich auf einen neu geschriebenen Code gestoßen, der mit viel Debug.Assert (C #) durchsetzt war.
Sollten wir dies trotz der Verwendung von TDD, BDD und Unit Testing im Allgemeinen immer noch in großem Umfang nutzen?
unit-testing
assertions
Dominik Fretz
quelle
quelle
Antworten:
Ich sehe keinen Grund, warum Sie Assert nicht verwenden sollten. Auf diese Weise haben Sie bereits erkannt, dass Schutzmaßnahmen wie Vorbedingungen und Invarianten erforderlich sind, und sind auf dem Weg zu Design by Contract . Behauptung ist nur ein Weg, um dies zu erreichen ...
Alle sind Wege, um dasselbe zu erreichen: Robustheit im Code. Es kommt nur darauf an, eine Option auszuwählen, für die Assert eine gültige Wahl ist.
Beachten Sie, dass ich Unit-Tests bisher überhaupt nicht erwähnt habe, da sie etwas ganz anderes bewirken. Ein Komponententest beweist die Robustheit des Codes formell, indem er eine Wache ausübt:
Dies ist eine ganz andere Art von Behauptung ...
** Beachten Sie, dass es in einigen Frameworks sehr schwierig ist, einen Komponententest für einen Assertionsfehler durchzuführen, da ein Assertionsfehler die gesamte Laufzeit beeinträchtigen kann. Daher ist eine der anderen Optionen möglicherweise vorzuziehen ... *
quelle
Ich betrachte Asserts und Unit-Tests als zwei verschiedene Tools in meiner Toolbox. Einige Dinge sind besser für das eine und andere besser für das andere geeignet.
Als Beispiel verwende ich heutzutage meistens Asserts, um Parameter für nicht öffentliche Methoden zu validieren.
quelle
Ich betrachte Debug.Assert heutzutage als vorzeitige Optimierung. Wenn Sie die Leistung nicht wirklich benötigen, kann das Unterdrücken der Zusicherung im Freigabemodus Fehler länger verbergen.
Als MattDavey Punkte aus Code Verträgen können statt dynamischer Überprüfung Überprüfung, ein überlegenes und bietet statisch sein und zur Verfügung , wenn nicht ich lieber Trace.Assert oder ein plain old
if(x) throw SomeException;
quelle
Debug
Klasse von der Kompilierung übersprungen werden. Das Unterdrücken von Aufrufen zurAssert
Leistungsverbesserung ist also nicht nur eine vorzeitige Optimierung, sondern ein Unsinn.