Я неправильно выполняю этот простой контракт?
Это мой код:
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 пока не имеет совместимости для кодовых контрактов.
Я посмотрел на документацию и, насколько я могу судить, у меня не должно быть этой проблемы.
Я неправильно использую кодовые контракты или моя среда не позволяет ему работать?
Спасибо.