In een normaal scenario zou u, telkens wanneer u een fout ontdekt tijdens het uitvoeren van de test, de test stoppen, de fout herstellen en de test opnieuw uitvoeren.
Maar JUnit heeft een iets andere benadering. Met de JUnit-foutverzamelaar kunt u nog steeds doorgaan met het uitvoeren van de test, zelfs nadat een probleem is gevonden of de test is mislukt. Error collector verzamelt alle foutobjecten en rapporteert dit slechts één keer nadat de test is voltooid.
In deze tutorial leer je-
- Wat is een foutcollector in JUnit?
- Wat is @Rule in jUnit?
- Voorbeeld met ErrorCollector
- Voordelen van JUnit ErrorCollector
Waarom Error Collector gebruiken?
Tijdens het schrijven van een testscript wilt u alle tests uitvoeren, zelfs als een regel code mislukt vanwege een netwerkfout, een beweringsfout of een andere reden. In die situatie kunt u nog steeds doorgaan met het uitvoeren van een testscript met een speciale functie van JUnit, bekend als "error collector".
Hiervoor gebruikt JUnit @Rule-annotatie die wordt gebruikt om een object of error collector te maken. Zodra het object voor foutverzamelaar is gemaakt, kunt u eenvoudig alle fouten aan het object toevoegen met de methode addError (Throwable error). Zoals u weet, is die Throwable de superklasse van de klasse Uitzondering en Fout in Java. Wanneer u op deze manier fouten toevoegt, worden deze fouten vastgelegd in het JUnit-testresultaat.
Het voordeel van het toevoegen van alle fouten in een Error Collector is dat u alle fouten in één keer kunt verifiëren. Als het script halverwege mislukt, kan het nog steeds doorgaan met het uitvoeren ervan
Opmerking : in het geval van het gebruik van simple assert of try / catch block, is het gebruik van de error collector-methode niet mogelijk.
Voorbeeldcode
Zie het onderstaande codevoorbeeld voor meer informatie over Error Collector, dat laat zien hoe u een Error Collector-object maakt en alle fouten in dat object toevoegt om het probleem op te sporen:
pakket guru99.junit;importeer org.junit.Rule;importeer org.junit.Test;importeer org.junit.rules.ErrorCollector;openbare klasse ErrorCollectorExample {@Regelopenbare ErrorCollector collector = nieuwe ErrorCollector ();@Testvoorbeeld openbaar leegte () {collector.addError (nieuwe Throwable ("Er is een fout in de eerste regel"));collector.addError (nieuwe Throwable ("Er is een fout in de tweede regel"));collector.checkThat (getResults (),not (bevatString ("hier is een fout")));// alle regels code worden uitgevoerd en aan het einde wordt een gecombineerde fout uitgevoerdingelogd zijn.
Wat is @Rule in jUnit?
JUnit biedt een speciaal soort afhandeling van tests, testcase of testsuite door @rule-annotatie te gebruiken . Met @rule kunt u eenvoudig het gedrag van de test toevoegen of opnieuw definiëren.
Er zijn verschillende ingebouwde regels geleverd door JUnit API die een tester kan gebruiken, of zelfs u kunt onze eigen regel schrijven.
Zie de onderstaande coderegel, die laat zien hoe u @rule-annotatie samen met Error Collector kunt gebruiken:
@Regelopenbare ErrorCollector collector = nieuwe ErrorCollector ();
Voorbeeld met ErrorCollector
Om de foutverzamelaar te begrijpen, maken we een klasse en een regel om alle fouten te verzamelen. U voegt hier alle fouten toe met addError (throwable).
Zie onderstaande code die eenvoudig een regel maakt die niets anders is dan het maken van "Error Collector-object". Die wordt verder gebruikt om alle fouten toe te voegen om het probleem aan het einde te melden:
ErrorCollectorExample.java
pakket guru99.junit;importeer org.junit.Assert;importeer org.junit.Rule;importeer org.junit.Test;importeer org.junit.rules.ErrorCollector;openbare klasse ErrorCollectorExample {@Regelopenbare ErrorCollector collector = nieuwe ErrorCollector ();@Testvoorbeeld openbaar leegte () {collector.addError (nieuwe Throwable ("Er is een fout in de eerste regel"));collector.addError (nieuwe Throwable ("Er is een fout in de tweede regel"));System.out.println ("Hallo");proberen {Assert.assertTrue ("A" == "B");} catch (Throwable t) {collector.addError (t);System.out.println ("Wereld !!!!");
TestRunner.java
Laten we bovenstaande testklasse toevoegen aan een testrunner en deze uitvoeren om alle fouten te verzamelen. Zie onderstaande code:
pakket guru99.junit;importeer org.junit.runner.JUnitCore;importeer org.junit.runner.Result;import org.junit.runner.notification.Failure;openbare klasse TestRunner {public static void main (String [] args) {Resultaat resultaat = JUnitCore.runClasses (ErrorCollectorExample.class);voor (Failure failure: result.getFailures ()) {System.out.println (failure.toString ());System.out.println ("Result ==" + result.wasSuccessful ());
Uitgang:
Bekijk de storingstracering die alle fouten op één plek opspoort:
Voordelen van JUnit ErrorCollector
U kunt JUnit-assertion gebruiken voor functionele of GUI-validatie, bijvoorbeeld
- assertEquals (String bericht, Object verwacht, Object werkelijk) die vergelijken dat twee objecten gelijk zijn.
- Evenzo beweert assertTrue (Booleaanse voorwaarde) dat een voorwaarde waar is.
Met behulp van assertion wordt validatietest eenvoudig. Maar een belangrijk probleem is dat de testuitvoering stopt, zelfs als een enkele bewering mislukt.
Testcontinuïteit en herstelafhandeling zijn cruciaal om het succes van automatisering te testen. Error Collector is de beste manier om met dergelijke scenario's om te gaan.
Samenvatting :
- Met de Junit-foutcollector kan een test doorgaan, zelfs nadat het eerste probleem is gevonden en de test aan het einde mislukt
- Error collector verzamelt alle foutobjecten en rapporteert tenslotte alleen de testuitvoering
- Het voordeel van het toevoegen van alle fouten in een Error Collector is dat u alle fouten in één keer kunt verifiëren
- Error collector voegt eenvoudig fouten toe met behulp van de methode addError (throwable err) van ErrorCollector.java.