Un test di unità / integrazione che può comportare un loop infinito ha una chiara affermazione?

6

Unità: un'unità multithread legge i dati di una coda e la elabora, inviandola a un'altra coda. Quando l'ultimo elemento viene elaborato (valore null trovato) il processo si interrompe.

Test: posiziona una serie di dati noti nella coda ed esegui. Verifica che i dati inseriti nella coda di output siano corretti.

Se l'unità è programmata in modo errato, può continuare a provare a leggere ed elaborare i null della coda. Questo può o non può comportare un'eccezione (utilizzando Java come lingua di esempio). Quindi questo test potrebbe in teoria causare un loop infinito.

Il test dovrebbe tenere traccia del numero di elementi letti dalla coda e generare un errore se viene letto più del numero specificato di elementi? o il test continuerà a funzionare, sapendo che il corridore (umano) vedrà che non sta finendo?

    
posta Michael K 02.12.2010 - 18:34
fonte

3 risposte

10

I test dovrebbero sempre terminare (idealmente velocemente!).

Se hai un test che non termina, il tuo server di integrazione continua fallirà la sua esecuzione di test, il che è grandioso, ma l'errore probabilmente sarà "la tua suite di test impiegò troppo tempo, quindi l'ho uccisa", che non è molto utile.

In questo caso, se hai N elementi nell'elenco e hai già letto N + 2 elementi, allora il tuo test dovrebbe fallire e spiega perché (diciamo, un messaggio come "test fallito perché stava per loopare infinitamente ").

    
risposta data 02.12.2010 - 19:16
fonte
1

Sono d'accordo con Frank: i test unitari dovrebbero essere eseguiti rapidamente per dare un rapido riscontro. Un ciclo infinito non ti darà un feedback veloce!

Inoltre, il nostro framework di test unitario ha un timeout (configurabile) di 30 secondi. Superate questo e il test è terminato e fallisce e passa al successivo.

    
risposta data 21.05.2011 - 11:27
fonte
1

Il test in questo caso è "For_Given_Input_Output_Is_As_Predicted". Nel momento in cui l'output non corrisponderà mai alla previsione (cioè supera il numero di elementi inseriti), è possibile trattare il test in modo affidabile come non riuscito. Questo è quello che dovresti fare.

    
risposta data 15.11.2011 - 11:23
fonte

Leggi altre domande sui tag