Я неправильно выполняю этот простой контракт?

Это мой код:

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);
    }

}

Я пытался с обоимиContract.Requires а такжеContract.Invariant методы, чтобы препятствовать тому, чтобы переменная vertexCount стала меньше или равна 2; однако я все еще могу инициализировать RegularPolygon с 2 или менее сторонами. Мой (упрощенный) тест NUnit выглядит так:

[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));
    }

}

Вышеупомянутый тест также проходит, и я не могу понять, почему!

Сначала я подумал, что ReSharper мог что-то испортить, потому что он затеняет строку и отображает это сообщение всякий раз, когда я пытаюсь использовать метод вContract Пространство имен:

Вызов метода пропускается. Компилятор не будет генерировать вызов метода, потому что метод является условным, или это частичный метод без реализации.

Но приостановка R # и запуск тестов в NUnit дают тот же результат, без ошибок или предупреждений в VS. Так что я предполагаю, что это просто потому, что ReSharper пока не имеет совместимости для кодовых контрактов.

Я посмотрел на документацию и, насколько я могу судить, у меня не должно быть этой проблемы.

Я неправильно использую кодовые контракты или моя среда не позволяет ему работать?

Спасибо.

Ответы на вопрос(1)

Ваш ответ на вопрос