Wie kann ich Code-Verträge für vorhandenen Framework-Code (BCL) angeben?

9

Code Contracts funktionieren gut, bis Sie ein bazillion Contract.Assume(...) für die Ergebnisse aus dem Framework-Code hinzufügen müssen. Zum Beispiel gibt MemoryStream.ToArray() niemals ein Null-Array zurück, so gut ich das anhand von Reflector sehen kann, aber es ist nicht als Vertrag dokumentiert, also muss ich Assume überall angeben.

Gibt es eine magische Möglichkeit, eine Vertragsbibliothek für Funktionen zu erstellen, die bereits existieren? Ich schätze, dass, sobald Sie ein paar Dutzend der am häufigsten verwendeten Framework-Funktionen vergeben haben, die Warnungen viel schmackhafter werden würden.

    
Sebastian Good 12.10.2010, 19:55
quelle

1 Antwort

1

Ich glaube nicht, dass Sie direkt können. Es gibt mehrere Dinge zu tun:

Fordern Sie den Vertrag in diesem Thread an > in den Code Contracts Foren.

Die vorgeschlagene Problemumgehung des Code Contracts-Teams besteht vorläufig darin, eine statische Methode zu erstellen, die alle erforderlichen Verträge übernimmt. Ich finde, dass dies am besten mit einer Erweiterungsmethode funktioniert:

%Vor%

Auf diese Weise verwenden Sie s.ToArrayContracted() anstelle von s.ToArray() . Sobald die Verträge für den Typ verfügbar sind, können Sie einfach ToArrayContracted bis ToArray suchen und ersetzen.

    
porges 13.10.2010, 04:43
quelle

Tags und Links