JUnit ErrorCollector @Regel med eksempel
โก Smart oppsummering
JUnit ErrorCollector er en regel som lar en test fortsette รฅ kjรธre etter en feil, samle alle feilobjekter og rapportere dem sammen nรฅr testmetoden er ferdig i stedet for รฅ stoppe.ping ved det fรธrste problemet.
I et normalt scenario, nรฅr du identifiserer en feil under testkjรธring, stopper du testen, fikser feilen og kjรธrer testen pรฅ nytt.
Men JUnit har en litt annen tilnรฆrming. Med JUnit feilinnsamleren, kan du fortsatt fortsette med testkjรธringen selv etter at et problem er funnet eller testen mislykkes. Feilinnsamleren samler alle feilobjekter og rapporterer dem bare รฉn gang, etter at testkjรธringen er over.
Hvorfor bruke Error Collector?
Nรฅr du skriver et testskript, vil du kjรธre alle testene selv om en kodelinje feiler pรฅ grunn av nettverksfeil, pรฅstandsfeil eller annen รฅrsak. I den situasjonen kan du fortsatt fortsette รฅ kjรธre testskriptet ved hjelp av en spesialfunksjon levert av JUnit kjent som "feilsamler".
For dette, JUnit bruker @Regelmerknad, som brukes til รฅ opprette et objekt for feilinnsamleren. Nรฅr objektet for feilinnsamleren er opprettet, kan du enkelt legge til alle feilene i objektet ved hjelp av metoden addError (kastbar feil)Som du vet, Kastbar er superklassen til Unntak og Feil klasser i JavaNรฅr du legger til feil pรฅ denne mรฅten, vil disse feilene bli logget i JUnit testresultat.
Fordelen med รฅ legge til alle feil i en feilsamler er at du kan bekrefte alle feilene samtidig. Hvis skriptet feiler midtveis, fortsetter kjรธringen til slutten av testmetoden.
MerknaderVed bruk av en enkel assert- eller en try/catch-blokk vil det ikke vรฆre mulig รฅ bruke error collector-metoden.
Eksempelkode
For รฅ forstรฅ mer om Error Collector, se kodeeksemplet nedenfor, som demonstrerer hvordan du oppretter et Error Collector-objekt og legger til alle feilene i det objektet. track problemet:
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. } }
OBS: dette er et illustrerende eksempeltract, ikke en kompilerbar fil. Den etterfรธlgende kommentaren brytes til en andre linje uten en innledende //, og getResults() pluss Hamcrest-matcherne vises ikke. Den komplette kjรธrbare versjonen fรธlger under Eksempel ved bruk av ErrorCollector.
Hva er @Rule i JUnit?
JUnit gir en spesiell type hรฅndtering av tester, Testsak eller testpakke ved รฅ bruke @RegelmerknadVed รฅ bruke @Rule kan du enkelt legge til eller omdefinere testens oppfรธrsel.
Det finnes flere innebygde regler gitt av JUnit API som en tester kan bruke, og du kan ogsรฅ skrive din egen regel. Et regelfelt mรฅ vรฆre offentlig, ikke-statisk og av en type som implementerer TestRule.
Se kodelinjen nedenfor, som viser hvordan du bruker @Rule-annotasjonen sammen med Error Collector:
@Rule public ErrorCollector collector= new ErrorCollector();
JUnit 5-notat: Jupiter erstattet regler med Extension API, sรฅ @Rule og ErrorCollector finnes ikke i org.junit.jupiter. De nรฆrmeste ekvivalentene er Assertions.assertAll() og AssertJ SoftAssertions. JUnit 4-koden som vises her kjรธrer fortsatt gjennom den gamle motoren. Se JUnit merknader veiledning for hele kartetping.
Eksempel ved bruk av ErrorCollector
For รฅ forstรฅ feilinnsamleren, la oss lage en klasse og en regel for รฅ samle alle feilene. Du legger til alle feilene ved hjelp av addError(throwable) her.
Se koden nedenfor, som ganske enkelt oppretter en regel som ikke er noe annet enn et ยซError Collector-objektยป. Den brukes videre til รฅ legge til alle feilene for รฅ rapportere problemet pรฅ slutten:
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
La oss legge til testklassen ovenfor i en testkjรธrer og kjรธre den for รฅ samle alle feilene. Se koden nedenfor:
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()); } }
Utgang:
Se feilen trace, som tracalle feilene pรฅ ett sted. JUnit visningen teller รฉn kjรธring, men rapporterer to feil og รฉn feil, hver med sitt eget linjenummer:
Fordeler med JUnit ErrorCollector
Du kan bruke en JUnit pรฅstand for funksjonell eller GUI-validering, for eksempel:
- assertEquals(String message, Object expected, Object actual), som sammenligner at to objekter er like.
- Pรฅ samme mรฅte hevder assertTrue (boolsk tilstand) at en betingelse er sann.
Ved รฅ bruke pรฅstander blir valideringstesting enkelt. Men et stort problem er at testkjรธringen vil stoppe selv om en enkelt pรฅstand mislykkes.
Testkontinuitet og gjenopprettingshรฅndtering er avgjรธrende for suksess med testautomatisering, og det er viktigst pรฅ lang sikt. Selenium flyter der det er dyrt รฅ starte en nettleser pรฅ nytt etter hver mislykkede sjekk. Error Collector er den beste mรฅten รฅ hรฅndtere slike scenarier pรฅ.

