Ho difficoltà a sviluppare approcci di testing unitario per testare sia se il "codice fa quello che voglio che faccia", sia testando "il mio codice funziona".
Ad esempio, sto scrivendo il codice per convalidare l'input che verrà inserito in una tabella del database, quindi ho bisogno di verificare se il mio codice fa quello che voglio che faccia - Viene accettato un input valido, l'input errato viene rifiutato. Ecco alcuni dei codici, in VB.NET:
'Let's check if we are going to update all the fields that must be updated...
If record.table.RequiredMustBeSuplied IsNot Nothing Then
For Each req In record.table.RequiredMustBeSuplied
If query.UpdateFields(req.Key).value Is Nothing Then
Throw New ArgumentNullException
End If
Next
End If
Quindi, per il mio test di unità passerei una query senza i campi di aggiornamento appropriati e mi aspetto che si tradurrebbe in un ArgumentNullException
e un test corrispondente che passi. Il problema che mi succede più avanti noterò un bug e capisco che il mio codice non funziona correttamente. Ad esempio, il codice corretto in questo caso era:
'Let's check if we are going to update all the fields that must be updated...
If record.table.RequiredMustBeSuplied IsNot Nothing Then
For Each req In record.table.RequiredMustBeSuplied
If query.UpdateFields(req.Key).value Is Nothing Then
Throw New ArgumentNullException
End If
Next
End If
Quindi, sono stato in grado di verificare i problemi che conosco (campi mancanti) ma non un problema che non conosco (la differenza tra dbnull
e niente). Il testing delle unità non è molto efficace nel trovare questi tipi di errori, oppure esiste un approccio che qualcuno potrebbe suggerire?