JUnit ErrorCollector @Rule con esempio

Sommario:

Anonim

In uno scenario normale, ogni volta che si identifica un errore durante l'esecuzione del test, si interromperà il test, si correggerà l'errore e si rieseguirà il test.

Ma JUnit ha un approccio leggermente diverso. Con JUnit error collector, è comunque possibile continuare con l'esecuzione del test anche dopo che è stato rilevato un problema o il test ha avuto esito negativo. Il raccoglitore di errori raccoglie tutti gli oggetti di errore e li segnala solo una volta al termine dell'esecuzione del test.

In questo tutorial imparerai-

  • Cos'è il raccoglitore di errori in JUnit?
  • Cos'è @Rule in jUnit?
  • Esempio utilizzando ErrorCollector
  • Vantaggi di JUnit ErrorCollector

Perché utilizzare Error Collector?

Durante la scrittura di uno script di test, si desidera eseguire tutti i test anche se una riga di codice non riesce a causa di un errore di rete, di un'asserzione o di qualsiasi altro motivo. In tale situazione, è comunque possibile continuare a eseguire lo script di test utilizzando una funzione speciale fornita da JUnit nota come "raccoglitore di errori".

Per questo, JUnit utilizza l'annotazione @Rule che viene utilizzata per creare un oggetto di raccolta degli errori. Una volta creato l'oggetto per il raccoglitore di errori, è possibile aggiungere facilmente tutti gli errori nell'oggetto utilizzando il metodo addError (Throwable error). Come sai, Throwable è la super classe della classe Exception ed Error in Java. Quando si aggiungono errori in questo modo, questi verranno registrati nei risultati del test JUnit.

Il vantaggio di aggiungere tutti gli errori in un Error Collector è che puoi verificare tutti gli errori contemporaneamente. Inoltre, se lo script fallisce nel mezzo, può comunque continuare a eseguirlo

Nota : in caso di utilizzo del blocco assert o try / catch semplice, non sarà possibile utilizzare il metodo di raccolta degli errori.

Codice di esempio

Per saperne di più su Error Collector, vedere l'esempio di codice riportato di seguito che dimostra come creare un oggetto Error Collector e aggiungere tutti gli errori in tale oggetto per tenere traccia del problema:

pacchetto guru99.junit;import org.junit.Rule;import org.junit.Test;import org.junit.rules.ErrorCollector;public class ErrorCollectorExample {@Regolapublic ErrorCollector collector = new ErrorCollector ();@Testpublic void example () {collector.addError (new Throwable ("C'è un errore nella prima riga"));collector.addError (new Throwable ("C'è un errore nella seconda riga"));collector.checkThat (getResults (),not (containsString ("qui è un errore")));// verranno eseguite tutte le righe di codice e alla fine verrà eseguito un errore combinatoessere loggato.}}

Cos'è @Rule in jUnit?

JUnit fornisce un tipo speciale di gestione di test, test case o suite di test utilizzando l'annotazione @rule . Usando @rule, puoi facilmente aggiungere o ridefinire il comportamento del test.

Esistono diverse regole integrate fornite dall'API JUnit che un tester può utilizzare, o anche tu puoi scrivere la nostra regola.

Vedi sotto la riga di codice, che mostra come utilizzare l'annotazione @rule insieme a Error Collector:

@Regolapublic ErrorCollector collector = new ErrorCollector ();

Esempio utilizzando ErrorCollector

Per comprendere il collettore di errori, creiamo una classe e una regola per raccogliere tutti gli errori. Aggiungerai tutti gli errori usando addError (throwable) qui.

Vedi sotto il codice che crea semplicemente una regola che non è altro che la creazione di un "oggetto Error Collector". Che viene inoltre utilizzato per aggiungere tutti gli errori al fine di segnalare il problema alla fine:

ErrorCollectorExample.java

pacchetto guru99.junit;import org.junit.Assert;import org.junit.Rule;import org.junit.Test;import org.junit.rules.ErrorCollector;public class ErrorCollectorExample {@Regolapublic ErrorCollector collector = new ErrorCollector ();@Testpublic void example () {collector.addError (new Throwable ("C'è un errore nella prima riga"));collector.addError (new Throwable ("C'è un errore nella seconda riga"));System.out.println ("Hello");provare {Assert.assertTrue ("A" == "B");} catch (Throwable t) {collector.addError (t);}System.out.println ("World !!!!");}}

TestRunner.java

Aggiungiamo la classe di test sopra in un test runner ed eseguiamola per raccogliere tutti gli errori. Vedi sotto il codice:

pacchetto guru99.junit;import org.junit.runner.JUnitCore;import org.junit.runner.Result;import org.junit.runner.notification.Failure;public class TestRunner {public static void main (String [] args) {Risultato risultato = JUnitCore.runClasses (ErrorCollectorExample.class);for (Failure failure: result.getFailures ()) {System.out.println (failure.toString ());}System.out.println ("Result ==" + result.wasSuccessful ());}}

Produzione:

Visualizza la traccia del guasto che traccia tutti gli errori in un unico punto:

Vantaggi di JUnit ErrorCollector

È possibile utilizzare l'asserzione JUnit per la convalida funzionale o GUI, ad es

  1. assertEquals (messaggio stringa, oggetto atteso, oggetto effettivo) che confrontano il fatto che due oggetti sono uguali.
  2. Allo stesso modo, assertTrue (condizione booleana) asserisce che una condizione è vera.

Utilizzando l'asserzione, il test di convalida diventa facile. Ma uno dei problemi principali è che l'esecuzione del test si interromperà anche se una singola asserzione fallisce.

La continuità del test e la gestione del ripristino sono fondamentali per il successo dell'automazione dei test. Error Collector è il modo migliore per gestire questo tipo di scenari.

Riepilogo :

  • Junit error collector consente a un test di continuare anche dopo che il primo problema è stato trovato e il test non riesce alla fine
  • Il raccoglitore di errori raccoglie tutti gli oggetti di errore e riporta solo, dopo tutto, l'esecuzione del test
  • Il vantaggio di aggiungere tutti gli errori in un Error Collector è che puoi verificare tutti gli errori contemporaneamente
  • Il raccoglitore di errori aggiunge semplicemente errori usando il metodo addError (throwable err) fornito da ErrorCollector.java.