JUnit ErrorCollector @Regel med exempel

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 ett lite annorlunda tillvรคgagรฅngssรคtt. Med JUnit felsamlare kan du fortfarande fortsรคtta med testkรถrningen รคven efter att ett problem har hittats eller testet misslyckats. Error collector samlar in alla felobjekt och rapporterar det endast en gรฅng efter att testkรถrningen รคr รถver.

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, pรฅstรฅendefel eller nรฅgon annan anledning. I den situationen kan du fortfarande fortsรคtta att kรถra testskript med en speciell funktion som tillhandahรฅlls av JUnit kรคnd som "felsamlare".

Fรถr detta, JUnit anvรคndningar @Regelanteckning som anvรคnds fรถr att skapa ett objekt med felsamlare. Nรคr objektet fรถr felsamlare har skapats kan du enkelt lรคgga till alla fel i objektet med metoden addError (Throwable error). Som ni vet, det Kastbar รคr superklassen av undantag och Fel klass i Java. Nรคr du lรคgger till fel pรฅ detta sรคtt kommer dessa fel att loggas in JUnit testresultat .

Fรถrdelen med att lรคgga till alla fel i en Error Collector รคr att du kan verifiera alla fel pรฅ en gรฅng. Dessutom, om skriptet misslyckas i mitten, kan det fortfarande fortsรคtta att kรถra det

Anmรคrkningar: Vid anvรคndning av enkel pรฅstรฅende eller fรถrsรถk/fรฅnga block, kommer det inte att vara mรถjligt att anvรคnda felinsamlarmetoden.

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 i det objektet till tracproblemet:

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.		
    }		
}	

Vad รคr @Rule i jUnit?

JUnit ger speciell typ av hantering av tester, Testfall eller testsvit genom att anvรคnda @regelkommentar. Med @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, eller till och med du kan skriva vรฅr egen regel.

Se nedanstรฅende kodrad, som visar hur du anvรคnder @rule annotation tillsammans med Error Collector:

@Rule				
public ErrorCollector collector= new ErrorCollector();

Exempel med ErrorCollector

Fรถr att fรถrstรฅ felsamlaren, lรฅt oss skapa en klass och en regel fรถr att samla in alla fel. Du kommer att lรคgga till alla fel genom att anvรคnda addError(throwable) hรคr.

Se nedan kod som helt enkelt skapar en regel som inte รคr nรฅgot annat รคn att skapa "Error Collector-objekt." Som vidare anvรคnds 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 i en testlรถpare och kรถra den fรถr att samla in alla fel. Se nedanstรฅende kod:

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 tracvilket tracalla fel pรฅ ett stรคlle:

TestRunner.Java Produktion

Fรถrdelar med JUnit ErrorCollector

Du kan anvรคnda JUnit pรฅstรฅende fรถr funktionell eller GUI-validering, t.ex

  1. assertEquals(Strรคngmeddelande, Objekt fรถrvรคntat, Objekt faktiskt) som jรคmfรถr att tvรฅ objekt รคr lika.
  2. Pรฅ liknande sรคtt hรคvdar assertTrue(Booleskt villkor) att ett villkor รคr sant.

Genom att anvรคnda pรฅstรฅende blir valideringstest enkelt. Men en stor frรฅga รคr att testkรถrningen kommer att stoppa รคven om ett enskilt pรฅstรฅende misslyckas.

Testkontinuitet och รฅterstรคllningshantering รคr avgรถrande fรถr att testa automatiseringsframgรฅng. Error Collector รคr det bรคsta sรคttet att hantera sรฅdana scenarier.

Sammanfattning

  • Junit error collector tillรฅter ett test att fortsรคtta รคven efter att det fรถrsta problemet har hittats och testet misslyckas i slutet
  • Error collector samlar alla felobjekt och rapporterar det bara, trots allt, testkรถrningen รถver
  • Fรถrdelen med att lรคgga till alla fel i en Error Collector รคr att du kan verifiera alla fel pรฅ en gรฅng
  • Error collector lรคgger helt enkelt till fel med metoden addError(throwable err) frรฅn ErrorCollector.java.

Sammanfatta detta inlรคgg med: