¿Estoy implementando este simple contrato incorrectamente?
Este es mi 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);
}
}
He intentado tanto con elContrato. Requiere yContract.Invariant métodos para evitar que la variable vertexCount sea menor o igual a 2; Sin embargo, todavía puedo inicializar un RegularPolygon con 2 o menos lados. Mi prueba de NUnit (simplificada) se ve así:
[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));
}
}
¡La prueba anterior también pasa y no puedo entender por qué!
Al principio pensé que ReSharper podría haber estado estropeando algo porque atenúa la línea y muestra este mensaje cada vez que intento usar un método en elContract
espacio de nombres:
Se omite la invocación del método. El compilador no generará la invocación del método porque el método es condicional o es un método parcial sin implementación.
Pero suspender R # y ejecutar las pruebas en NUnit tiene el mismo resultado sin errores ni advertencias en VS tampoco. Así que supongo que es solo porque ReSharper todavía no tiene compatibilidad de resaltado para contratos de código.
He mirado la documentación y, por lo que puedo decir, no debería tener este problema.
¿Estoy usando contratos de código incorrectamente o mi entorno impide que funcione de alguna manera?
Gracias.