2013-03-05 15 views
6

Perché il nome di un metodo di prova può influenzare altri test?Errore JUnit non riuscito a causa del nome del metodo

Ho una suite con 2 classi di test e quando cambio un nome di metodo di class1, il mio test in class2 è ok (verde).

Ho notato che entrambe le classi hanno un metodo con lo stesso nome, ma il test che sta fallendo non è nessuno di questi. Tuttavia se rinominare qualcuno di loro, tutti i test sono ok.

Va bene avere 2 metodi con lo stesso nome in classi diverse, ma nella stessa suite? E il fatto che un altro test fallisca casualmente è solo una coincidenza?

ps: l'ordine dei test eseguiti viene modificato dopo aver rinominato tale metodo. ps2: scusa per il mio pessimo inglese.

Quell'immagine può spiegare la mia domanda migliore: enter image description here

+11

I test sono ben progettati in modo che possano essere eseguiti in qualsiasi ordine? C'è uno stato che può dipendere dall'ordine che eseguono? – vikingsteve

+6

Il problema è probabilmente l'ordine di esecuzione e non il nome del test. Uno (o più) dei test potrebbe cambiare lo stato dell'altro. –

+1

Gli odori come un errore di isolamento del test, come viene chiamato quando un test dipende dagli effetti collaterali di un altro test, richiedendo quindi che vengano eseguiti in un ordine particolare. –

risposta

7

Non v'è alcun bug in JUnit! Il nostro team ha riscontrato risultati simili, causati da una gestione delle risorse inproprio. Puoi provare a rinominare il test non funzionante in modo che vengano eseguiti per primi. Dovrebbero diventare verdi ora, è soprattutto un segno che una risorsa viene accidentalmente condivisa tra i test. In tal caso, puoi provare a liberare la risorsa nello strappo (@After). Ecco una piccola lista di controllo per trovare la causa:

  • Ci sono Thread che sopravvivono a un test?
  • Tutti gli Executor sono stati arrestati e terminati?
  • I file o gli stream sono ancora aperti dopo un test?
  • Tutti i campi nella classe Test sono stati cancellati/reinizializzati dopo un test?
  • Evitare l'uso di riferimenti statici o singoletti
  • Non utilizzare risorse nel metodo di prova, solo nel metodo di rimozione. Altrimenti un'eccezione potrebbe rendere questo pezzo di codice irraggiungibile.
Problemi correlati