JUnit ErrorCollector @Rule con esempio

In uno scenario normale, ogni volta che si identifica un errore durante l'esecuzione del test, si interrompe il test, si corregge l'errore e si esegue nuovamente il test.

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

Perché utilizzare Error Collector?

Durante la scrittura di uno script di test, è necessario eseguire tutti i test anche se una qualsiasi riga di codice fallisce a causa di un errore di rete, di un'asserzione o per qualsiasi altro motivo. In tale situazione, puoi comunque continuare a eseguire lo script di test utilizzando una funzionalità speciale fornita da JUnit noto come “raccoglitore di errori”.

Per questo, JUnit usa Annotazione @Rule che viene utilizzato per creare un oggetto di raccolta errori. Una volta creato l'oggetto per il raccoglitore di errori, puoi facilmente aggiungere tutti gli errori nell'oggetto utilizzando il metodo addError (errore lanciabile). Come sai, quello Lanciabile è la super classe di Eccezione e Errore classe in Java. Quando aggiungi errori in questo modo, questi errori verranno registrati JUnit Risultato del test .

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

Note:: nel caso di utilizzo di un semplice assert o try/catch block, non sarà possibile utilizzare il metodo di raccolta errori.

Codice d'esempio

Per saperne di più su Error Collector, consulta 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:

package guru99.junit;		

import org.junit.Rule;		
import org.junit.Test;		
import org.junit.rules.ErrorCollector;		

public class ErrorCollectorExample {				
    @Rule		
    public ErrorCollector collector = new ErrorCollector();							

    @Test		
    public void example() {					
    collector.addError(new Throwable("There is an error in first line"));							
    collector.addError(new Throwable("There is an error in second line"));							
    collector.checkThat(getResults(),			
                not(containsString("here is an error")));			
    // all lines of code will execute and at the end a combined failure will		
    be logged in.		
    }		
}	

Cos'è @Rule in jUnit?

JUnit fornisce un tipo speciale di gestione dei test, Test Case o suite di test utilizzando Annotazione @regola. Utilizzando @rule, puoi facilmente aggiungere o ridefinire il comportamento del test.

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

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

@Rule				
public ErrorCollector collector= new ErrorCollector();

Esempio utilizzando ErrorCollector

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

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

ErrorCollectorExample.java

package guru99.junit;		

import org.junit.Assert;		
import org.junit.Rule;		
import org.junit.Test;		
import org.junit.rules.ErrorCollector;		

public class ErrorCollectorExample {				
    @Rule		
    public ErrorCollector collector = new ErrorCollector();							

    @Test		
    public void example() {					
    collector.addError(new Throwable("There is an error in first line"));							
    collector.addError(new Throwable("There is an error in second line"));							

        System.out.println("Hello");					
        try {			
            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 il codice seguente:

package 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) {									
      Result result = JUnitCore.runClasses(ErrorCollectorExample.class);					
			for (Failure failure : result.getFailures()) {							
         System.out.println(failure.toString());					
      }		
      System.out.println("Result=="+result.wasSuccessful());							
   }		
}      

Produzione:

Visualizza la traccia degli errori che traccia tutti gli errori in un unico posto:

TestRunner.Java Uscita

Vantaggi della JUnit ErrorCollector

Puoi usare JUnit asserzione per la convalida funzionale o GUI, ad es

  1. assertEquals(Messaggio String, Oggetto previsto, Oggetto effettivo) che confronta il fatto che due oggetti sono uguali.
  2. Allo stesso modo, assertTrue(condizione booleana) asserisce che una condizione è vera.

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

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

Sintesi

  • Il raccoglitore di errori Junit consente al test di continuare anche dopo che è stato rilevato il primo problema e il test fallisce alla fine
  • Il raccoglitore di errori raccoglie tutti gli oggetti di errore e li segnala solo, dopo tutto, l'esecuzione del test
  • Il vantaggio di aggiungere tutti gli errori in un raccoglitore di errori è che puoi verificare tutti gli errori contemporaneamente
  • Il raccoglitore di errori aggiunge semplicemente gli errori utilizzando il metodo addError(throwable err) fornito da ErrorCollector.java.