JUnit ErrorCollector @Regel med exempel
โก Smart sammanfattning
JUnit ErrorCollector รคr en regel som lรฅter ett test fortsรคtta kรถras efter ett fel, samlar in alla felobjekt och rapporterar dem tillsammans nรคr testmetoden รคr klar istรคllet fรถr att stoppas.ping vid det fรถrsta problemet.
I ett normalt scenario, nรคr du identifierar nรฅgot fel under testkรถrningen, skulle du stoppa testet, รฅtgรคrda felet och kรถra testet igen.
Men JUnit har en nรฅgot annorlunda strategi. Med JUnit felinsamlaren, du kan fortfarande fortsรคtta med testkรถrningen รคven efter att ett problem har upptรคckts eller testet misslyckas. Felinsamlaren samlar in alla felobjekt och rapporterar dem endast en gรฅng, efter att testkรถrningen รคr avslutad.
Varfรถr anvรคnda Error Collector?
Nรคr du skriver ett testskript vill du kรถra alla tester รคven om nรฅgon kodrad misslyckas pรฅ grund av nรคtverksfel, assertionfel eller nรฅgon annan anledning. I den situationen kan du fortfarande fortsรคtta kรถra testskriptet med hjรคlp av en specialfunktion som tillhandahรฅlls av JUnit kรคnd som "felsamlare".
Fรถr detta, JUnit anvรคnder @Regelanteckning, som anvรคnds fรถr att skapa ett objekt fรถr felinsamlaren. Nรคr objektet fรถr felinsamlaren har skapats kan du enkelt lรคgga till alla fel i objektet med hjรคlp av metoden addError (Throwable error). Som du vet, Kastbar รคr superklassen av undantag och Fel klasser i JavaNรคr du lรคgger till fel pรฅ det hรคr sรคttet loggas dessa fel i JUnit testresultat.
Fรถrdelen med att lรคgga till alla fel i en felinsamlare รคr att du kan verifiera alla fel samtidigt. Om skriptet misslyckas mitt i processen fortsรคtter kรถrningen till slutet av testmetoden.
AnmรคrkningarOm man anvรคnder en enkel assert- eller try/catch-block รคr det inte mรถjligt att anvรคnda error collector-metoden.
Exempelkod
Fรถr att fรถrstรฅ mer om Error Collector, se kodexemplet nedan, som visar hur man skapar ett Error Collector-objekt och lรคgger till alla fel till 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: detta รคr ett illustrativt exempeltract, inte en kompilerbar fil. Dess efterfรถljande kommentar radbryts till en andra rad utan inledande //, och getResults() plus Hamcrest-matcharna visas inte. Den fullstรคndiga kรถrbara versionen fรถljer nedan. Exempel med ErrorCollector.
Vad รคr @Rule i JUnit?
JUnit erbjuder en speciell typ av hantering av tester, Testfall eller testsviten med hjรคlp av @RegelanteckningMed hjรคlp av @Rule kan du enkelt lรคgga till eller omdefiniera testets beteende.
Det finns flera inbyggda regler som tillhandahรฅlls av JUnit API som en testare kan anvรคnda, och du kan ocksรฅ skriva din egen regel. Ett regelfรคlt mรฅste vara publikt, icke-statiskt och av en typ som implementerar TestRule.
Se kodraden nedan, som visar hur man anvรคnder @Rule-annoteringen tillsammans med Error Collector:
@Rule public ErrorCollector collector= new ErrorCollector();
JUnit 5-notering: Jupiter ersatte regler med Extension API, sรฅ @Rule och ErrorCollector finns inte i org.junit.jupiter. De nรคrmaste motsvarigheterna รคr Assertions.assertAll() och AssertJ SoftAssertions. JUnit 4-koden som visas hรคr kรถrs fortfarande genom den gamla motorn. Se JUnit annoteringar handledning fรถr hela kartanping.
Exempel med ErrorCollector
Fรถr att fรถrstรฅ felinsamlaren, lรฅt oss skapa en klass och en regel fรถr att samla in alla fel. Du kommer att lรคgga till alla fel med hjรคlp av addError(throwable) hรคr.
Se koden nedan, som helt enkelt skapar en regel som inte รคr nรฅgot annat รคn ett "Error Collector-objekt". Den anvรคnds vidare fรถr att lรคgga till alla fel fรถr att rapportera problemet i slutet:
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
Lรฅt oss lรคgga till ovanstรฅende testklass till en testkรถrare och kรถra den fรถr att samla in alla fel. Se koden nedan:
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()); } }
Produktion:
Se misslyckandet trace, vilket tracalla fel pรฅ ett stรคlle. Den JUnit vyn rรคknar en kรถrning men rapporterar tvรฅ fel och ett misslyckande, vart och ett med sitt eget radnummer:
Fรถrdelar med JUnit ErrorCollector
Du kan anvรคnda en JUnit pรฅstรฅende fรถr funktionell eller GUI-validering, till exempel:
- assertEquals(String message, Object expected, Object actual), vilket jรคmfรถr att tvรฅ objekt รคr lika.
- Pรฅ liknande sรคtt hรคvdar assertTrue(Booleskt villkor) att ett villkor รคr sant.
Med hjรคlp av pรฅstรฅenden blir valideringstestning enkelt. Men ett stort problem รคr att testkรถrningen kommer att stoppas รคven om en enskild pรฅstรฅende misslyckas.
Testkontinuitet och hantering av รฅterstรคllning รคr avgรถrande fรถr att testautomation ska lyckas, och det รคr allra viktigast pรฅ lรฅng sikt. Selenium flรถden dรคr det รคr dyrt att starta om en webblรคsare efter varje misslyckad kontroll. Error Collector รคr det bรคsta sรคttet att hantera sรฅdana scenarier.

