C# Language
Codice Contratti e asserzioni
Ricerca…
Le asserzioni per verificare la logica dovrebbero sempre essere vere
Le asserzioni vengono utilizzate per non eseguire il test dei parametri di input, ma per verificare che il flusso del programma sia corretto, ovvero che è possibile formulare determinate ipotesi sul proprio codice in un determinato momento. In altre parole: un test eseguito con Debug.Assert
presuppone sempre che il valore testato sia true
.
Debug.Assert esegue solo in build DEBUG; viene filtrato dalle versioni RELEASE. Deve essere considerato uno strumento di debug oltre al test delle unità e non come una sostituzione dei contratti di codice o dei metodi di convalida dell'input.
Ad esempio, questa è una buona asserzione:
var systemData = RetrieveSystemConfiguration();
Debug.Assert(systemData != null);
Qui affermare è una buona scelta perché possiamo presumere che RetrieveSystemConfiguration () restituirà un valore valido e non restituirà mai null.
Ecco un altro buon esempio:
UserData user = RetrieveUserData();
Debug.Assert(user != null);
Debug.Assert(user.Age > 0);
int year = DateTime.Today.Year - user.Age;
Innanzitutto, si può presumere che RetrieveUserData () restituisca un valore valido. Quindi, prima di utilizzare la proprietà Age, verifichiamo l'ipotesi (che dovrebbe sempre essere vera) che l'età dell'utente sia strettamente positiva.
Questo è un cattivo esempio di asserzione:
string input = Console.ReadLine();
int age = Convert.ToInt32(input);
Debug.Assert(age > 16);
Console.WriteLine("Great, you are over 16");
Assert non è per la convalida dell'input perché non è corretto presumere che questa asserzione sarà sempre vera. È necessario utilizzare metodi di convalida dell'input per quello. Nel caso precedente, dovresti anche verificare che il valore di input sia un numero in primo luogo.