C# Language
Codecontracten en beweringen
Zoeken…
Beweringen om logica te controleren moeten altijd waar zijn
Beweringen worden niet gebruikt om invoerparameters te testen, maar om te controleren of de programmaflow correct is, dat wil zeggen dat u op een bepaald moment bepaalde veronderstellingen over uw code kunt maken. Met andere woorden: een test uitgevoerd met Debug.Assert
moet er altijd van uitgaan dat de geteste waarde true
.
Debug.Assert wordt alleen uitgevoerd in DEBUG-builds; het wordt gefilterd uit RELEASE-builds. Het moet worden beschouwd als een hulpmiddel voor foutopsporing naast het testen van eenheden en niet als een vervanging van codecontracten of methoden voor invoervalidatie.
Dit is bijvoorbeeld een goede bewering:
var systemData = RetrieveSystemConfiguration();
Debug.Assert(systemData != null);
Hier is assert een goede keuze omdat we kunnen aannemen dat RetrieveSystemConfiguration () een geldige waarde retourneert en nooit null retourneert.
Hier is nog een goed voorbeeld:
UserData user = RetrieveUserData();
Debug.Assert(user != null);
Debug.Assert(user.Age > 0);
int year = DateTime.Today.Year - user.Age;
Eerst kunnen we aannemen dat RetrieveUserData () een geldige waarde retourneert. Voordat we de eigenschap Age gebruiken, verifiëren we vervolgens de veronderstelling (wat altijd waar moet zijn) dat de leeftijd van de gebruiker strikt positief is.
Dit is een slecht voorbeeld van bewering:
string input = Console.ReadLine();
int age = Convert.ToInt32(input);
Debug.Assert(age > 16);
Console.WriteLine("Great, you are over 16");
Bewering is niet voor inputvalidatie omdat het onjuist is om aan te nemen dat deze bewering altijd waar zal zijn. U moet daarvoor invoervalidatiemethoden gebruiken. In het bovenstaande geval moet u ook controleren of de invoerwaarde in de eerste plaats een getal is.