Helfen Code-Verträge wirklich Unit-Tests?

8

Ich habe ziemlich viel Wissen über Unit Testing. Ich habe versucht, über Code-Verträge zu lesen. Hilft es wirklich Unit-Tests? Wird es überbewertet, besonders wenn wir über Code-Contract sprechen, der uns hilft, Komponententests durchzuführen? Ich beziehe mich speziell auf Verträge in .net 4.0. Ich benutze Nunit für Unit-Tests.

    
Sandbox 27.07.2010, 15:36
quelle

3 Antworten

4

Ja und Nein . Komponententests sind im Grunde genommen ein Vertrag, der besagt, dass MyMethod () X akzeptiert und erwartet, dass Y ein Ergebnis sein wird. Wenn dies nicht der Fall ist, schlagen Komponententests fehl und Sie werden als Entwickler von MyMethod () gewarnt etwas darin. Code-Verträge helfen Ihnen, Komponententests zu schreiben, weil die Anforderungen in den Verträgen es einfacher machen, die Anforderungen der Komponententests zu kennen, wenn Sie sie schreiben. Der wahre Grund für Code-Verträge liegt jedoch nicht bei Ihnen, sondern bei anderen Entwicklern, die die von Ihnen erstellte API verwenden. Komponententests geben Ihnen einen Überblick über die richtigen Ein- und Ausgänge. Wenn Sie jedoch Code in den freien Modus freigeben, werden Komponententests nicht mit der DLL-Datei freigegeben. Code-Verträge geben anderen Entwicklern den Vorteil, durch Compile-Time-Verträge und die gleichen Anforderungen zu prüfen. Verträge schützen vor solchen Entwicklern (mir), die eine schreckliche Tendenz haben, die Methodendokumentation nicht zu lesen und einfach Dinge weiterzugeben, also werden sie jetzt aktiv durch Verträge gewarnt.

    
Ryan Hayes 27.07.2010 15:46
quelle
4

Code Contracts können für Dinge verwendet werden, bei denen Unit-Tests nicht möglich sind (Verträge für Schnittstellen). Sie werden in Vererbungsketten angewendet (in denen Sie beim manuellen Komponententest leicht Fehler machen können). Sie stellen die Dokumentation automatisch bereit (etwas, was Unit-Tests nicht können). Sie können Laufzeitprüfungen in der Produktion bereitstellen (was Unit-Tests nicht können).

Auf der anderen Seite scheitern Verträge nur, wenn sie ausgeführt werden, und so haben Sie ohne Komponententests keine Garantie für die Codequalität (d. h. dass Ihr gesamter Code die verschiedenen Verträge erfüllt). Die beiden Konzepte sind komplementär.

    
wekempf 13.12.2011 13:22
quelle
0

Nein, ich glaube nicht, dass Code-Verträge Ihnen helfen, Komponententests zu schreiben. Komponententests definieren das Verhalten und die Einschränkungen einer bestimmten Aktion. Eine dieser Spezifikationen, die in den Komponententests geschrieben werden, könnte sein, dass Argumente für eine Methode nicht null sein können.

In diesem Fall müssen Sie immer noch den Komponententest schreiben. Der Code-Vertrag ist ein Weg, um Ihre Spezifikation zu implementieren, aber nicht der einzige Weg.

Mit anderen Worten, gehen Sie nicht davon aus, dass die Verwendung eines Codevertrags bedeutet, dass Sie keinen Komponententest schreiben müssen! Wenn jemand den Codevertrag ändert oder ihn entfernt, wird kein Test Ihnen mitteilen, dass die beabsichtigte Spezifikation fehlgeschlagen ist.

    
Brian Genisio 27.07.2010 15:50
quelle