Ich implementiere diesen einfachen Vertrag falsch?

Dies ist mein Code:

public class RegularPolygon
{
    public int VertexCount;
    public double SideLength;

    public RegularPolygon(int vertexCount, double sideLength)
    {
        Contract.Requires(vertexCount >= 3);
        VertexCount = vertexCount;
        SideLength = sideLength;
    }

    [ContractInvariantMethod]
    private void RegularPolygonInvariants()
    {
        Contract.Invariant(VertexCount>=3);
    }

}

Ich habe es mit den beiden @ versuc Contract.Requires und Contract.Invariant Methoden, um zu verhindern, dass die Variable vertexCount kleiner oder gleich 2 wird; Es ist mir jedoch weiterhin möglich, ein RegularPolygon mit 2 oder weniger Seiten zu initialisieren. Mein (vereinfachter) NUnit-Test sieht folgendermaßen aus:

[TestFixture]
class TestRegularPolygon
{
    private RegularPolygon _polygon;

    [SetUp]
    public void Init()
    {
        _polygon = new RegularPolygon(1, 50);
    }

    [Test]
    public void Constructor()
    {
        Assert.That(_polygon.VertexCount,Is.GreaterThanOrEqualTo(3));
    }

}

Der obige Test besteht auch und ich kann nicht herausfinden, warum!

Als erstes dachte ich, ReSharper hätte etwas durcheinander gebracht, weil es die Zeile grau färbt und diese Meldung anzeigt, wenn ich versuche, eine Methode im @ zu verwendeContract Namespace:

er Aufruf von @Method wird übersprungen. Der Compiler generiert keinen Methodenaufruf, da die Methode bedingt oder eine Teilmethode ohne Implementierung ist.

Aber das Suspendieren von R # und das Ausführen der Tests in NUnit hat das gleiche Ergebnis, auch in VS gibt es keine Fehler oder Warnungen. Ich gehe also davon aus, dass ReSharper noch keine Hervorhebungskompatibilität für Codeverträge aufweist.

Ich habe mir die Dokumentation angesehen und soweit ich das beurteilen kann, sollte ich dieses Problem nicht haben.

Wenn ich Code-Verträge falsch verwende oder funktioniert sie in meiner Umgebung nicht?

Vielen Dank

Antworten auf die Frage(2)

Ihre Antwort auf die Frage