C# Language
Kod Umowy i asercje
Szukaj…
Twierdzenia sprawdzające logikę powinny zawsze być prawdziwe
Asercje nie są używane do testowania parametrów wejściowych, ale do sprawdzenia, czy przepływ programu jest poprawny - tzn. Czy można w pewnym momencie przyjąć pewne założenia dotyczące kodu. Innymi słowy: test wykonany za pomocą Debug.Assert
powinien zawsze zakładać, że testowana wartość jest true
.
Debug.Assert działa tylko w kompilacjach DEBUG; jest odfiltrowywany z kompilacji RELEASE. To musi być traktowane jako narzędzie do debugowania oprócz testów jednostkowych, a nie jako zamiennik umów kodu lub metod sprawdzania poprawności danych wejściowych.
Na przykład jest to dobre stwierdzenie:
var systemData = RetrieveSystemConfiguration();
Debug.Assert(systemData != null);
Tutaj assert jest dobrym wyborem, ponieważ możemy założyć, że RetrieveSystemConfiguration () zwróci prawidłową wartość i nigdy nie zwróci null.
Oto kolejny dobry przykład:
UserData user = RetrieveUserData();
Debug.Assert(user != null);
Debug.Assert(user.Age > 0);
int year = DateTime.Today.Year - user.Age;
Po pierwsze, możemy założyć, że funkcja RetrieveUserData () zwróci prawidłową wartość. Następnie przed użyciem właściwości Age weryfikujemy założenie (które zawsze powinno być prawdziwe), że wiek użytkownika jest ściśle dodatni.
To zły przykład twierdzenia:
string input = Console.ReadLine();
int age = Convert.ToInt32(input);
Debug.Assert(age > 16);
Console.WriteLine("Great, you are over 16");
Potwierdzenie nie służy do sprawdzania poprawności danych wejściowych, ponieważ błędne jest założenie, że to stwierdzenie zawsze będzie prawdziwe. W tym celu należy użyć metod sprawdzania poprawności danych wejściowych. W powyższym przypadku należy również sprawdzić, czy wartością wejściową jest liczba.