Estou implementando este contrato simples incorretamente?
Este é o meu código:
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);
}
}
Eu tentei com os doisContract.Requires eContract.Invariant métodos para impedir que a variável vertexCount se torne menor ou igual a 2; no entanto, ainda sou capaz de inicializar um RegularPolygon com 2 ou menos lados. Meu teste NUnit (simplificado) fica assim:
[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));
}
}
O teste acima também passa e não consigo entender o porquê!
No começo, pensei que o ReSharper poderia estar atrapalhando algo, porque fica fora da linha e exibe essa mensagem sempre que tento usar um método noContract
namespace:
A chamada do método é ignorada. O compilador não gerará a chamada do método porque o método é condicional ou é um método parcial sem implementação.
Mas suspender o R # e executar os testes no NUnit tem o mesmo resultado, sem erros ou avisos no VS. Portanto, suponho que isso ocorre apenas porque o ReSharper ainda não tem compatibilidade de destaque para contratos de código.
Examinei a documentação e, até onde sei, não deveria estar tendo esse problema.
Estou usando contratos de código incorretamente ou meu ambiente está impedindo que ele funcione de alguma forma?
Obrigado.