To jest mój kod:Czy wdrażam ten prosty kontrakt nieprawidłowo?
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);
}
}
Próbowałem zarówno z Contract.Requires i Contract.Invariant metod zapobiegających zmienną vertexCount z coraz mniejsza lub równa 2; jednak wciąż jestem w stanie zainicjować RegularPolygon z 2 lub mniej stronami. Mój (uproszczony) test NUnit wygląda następująco:
[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));
}
}
Powyższy test również mija i nie wiem dlaczego!
Na początku myślałem ReSharper mogło być brudząc coś ponieważ wyszarza linii i wyświetla ten komunikat gdy próbuję użyć metody w przestrzeni nazw Contract
:
Metoda inwokacja jest pomijany. Kompilator nie wygeneruje wywołania metody, ponieważ metoda jest warunkowa lub jest metodą częściową bez implementacji.
Ale zawieszenie R # i uruchomienie testów w NUnit ma taki sam wynik, bez błędów i ostrzeżeń w VS. Zakładam, że dzieje się tak tylko dlatego, że ReSharper nie ma jeszcze zaznaczającej zgodności dla kontraktów kodu.
Przyjrzałem się dokumentacji i o ile wiem, nie powinienem mieć tego problemu.
Czy używam nieprawidłowych kontraktów kodu lub czy moje środowisko nie działa w jakiś sposób?
Dziękuję.
Czy metoda niezmienna nie mogła tego złapać? Myślałem, że o to im chodzi. Powyższe nie jest moim kompletnym kodem, tylko przykładem do zademonstrowania mojego problemu. Jeśli po włączeniu sprawdzania umowy chodzi o przejście do właściwości projektu> Umowy z kodem> sprawdzanie statyczne/pełne sprawdzanie czasu wykonywania, tak, są one teraz włączone (nie były wcześniej), ale nadal mam ten sam problem. – Nobody
@rmx: Metody niezmienne nie będą uruchamiane po zmianie pól. Jak mogli? Nie ma kodu, do którego mogliby się podłączyć, chyba że kod wywołujący został zmodyfikowany. Teraz, jeśli chodzi o posiadanie "tego samego problemu" - czy masz * wszystkie * te same objawy? Czy R # nadal wyszarza linię? –
OK, anuluj to. Mam to działa. Moje niezmienne metody również musiały być prywatne. Nadal mam komunikat R # i wyszarzałem, ale nie ma to wpływu na funkcjonalność umów.Mam nadzieję, że naprawią to w następnym wydaniu. – Nobody