In quali circostanze e non vengono eseguiti

Ho una serie di casi di test MSTest che usano metodi con quegli attributi per cancellare tutte le righe dalle tabelle nel db di prova creato dopo l’avvio dei test; ogni tanto finisco con una riga da uno dei test unitari ancora nel DB.

Dato che sto salvando l’ora di inizio del test e cancellando tutti i record con data e ora più recenti, l’unico modo che posso vedere per i record sopravvissuti è se il codice cleanup non è stato chiamato.

Bene, prima di tutto, un “test unitario” tecnicamente non dovrebbe toccare il DB. Ma, io uso NUnit anche per i miei test di integrazione, quindi niente da fare.

Le uniche circostanze in cui i metodi di pulitura non vengono eseguiti nella loro interezza sono se si è verificato un errore nella funzione di pulitura o un’eccezione ha causato l’arresto del runtime. Gli unici che so che possono fare sono errori di overflow dello stack e di out-of-memory. Annullando un test dal debugger si salterà anche la fase di cleanup.

Una spiegazione più probabile, a seconda del livello di accesso ai dati, è che hai perso la connessione DB e la funzione di pulizia non è riuscita a ottenerne una nuova. Ciò in genere indica la necessità di rendere il DAL più robusto, e indica anche che qualcosa che non ti aspetti sta accadendo nel test per causare l’abbattimento del DAL.

Se si eseguono il debug dei test e si interrompe il debugger prima che l’esecuzione del test sia completata, questo non verrà chiamato.