JUnit ErrorCollector @Rule esimerkin kanssa

Normaalissa tilanteessa aina kun havaitset virheen testin suorittamisen aikana, lopetat testin, korjaat virheen ja suoritat testin uudelleen.

Mutta JUnit on hieman erilainen lรคhestymistapa. Kanssa JUnit virheenkerรคin, voit silti jatkaa testin suorittamista, vaikka ongelma havaitaan tai testi epรคonnistuu. Virhekerรคilijรค kerรครค kaikki virheobjektit ja raportoi niistรค vain kerran testin suorittamisen jรคlkeen.

Miksi kรคyttรครค Error Collectoria?

Kun kirjoitat testiskriptiรค, haluat suorittaa kaikki testit, vaikka jokin koodirivi epรคonnistuisi verkkovian, vahvistusvirheen tai muun syyn vuoksi. Tรคssรค tilanteessa voit silti jatkaa testikomentosarjan suorittamista kรคyttรคmรคllรค tarjoamaa erikoistoimintoa JUnit tunnetaan "virheiden kerรครคjรคnรค".

Tรคtรค varten, JUnit kรคyttรถtarkoituksiin @Sรครคnnรถn huomautus jota kรคytetรครคn virheenkerรคimen objektin luomiseen. Kun virhekerรคimen objekti on luotu, voit helposti lisรคtรค kaikki virheet objektiin menetelmรคllรค addError (heitettรคvรค virhe). Kuten tiedรคt, se Heitettรคvรค on superluokka Poikkeus ja Virhe luokka sisรครคn Java. Kun lisรครคt virheitรค tรคllรค tavalla, nรคmรค virheet kirjataan sisรครคn JUnit testitulos .

Kaikkien virheiden lisรครคminen Error Collectoriin on se etu, ettรค voit tarkistaa kaikki virheet kerralla. Lisรคksi, jos komentosarja epรคonnistuu kesken, se voi silti jatkaa sen suorittamista

Huomautuksia: Jos kรคytรคt yksinkertaista vahvistusta tai try/catch block , virhekerรคysmenetelmรคn kรคyttรถ ei ole mahdollista.

Esimerkkikoodi

Saadaksesi lisรคtietoja virheidenkerรครคjรคstรค, katso alla oleva koodiesimerkki, joka havainnollistaa, kuinka luodaan virheidenkerรครคjรคobjekti ja lisรคtรครคn kaikki objektin virheet track ongelma:

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

Mikรค on @Rule jUnitissa?

JUnit tarjoaa erityistรค testien kรคsittelyรค, Testitapaus tai testipakettia kรคyttรคmรคllรค @sรครคnnรถn huomautus. @rule:n avulla voit helposti lisรคtรค tai mรครคrittรครค testin kรคyttรคytymisen uudelleen.

Tarjolla on useita sisรครคnrakennettuja sรครคntรถjรค JUnit API, jota testaaja voi kรคyttรครค, tai jopa sinรค voit kirjoittaa oman sรครคntรถmme.

Katso alla koodirivi, joka nรคyttรครค, kuinka @rule-merkintรครค kรคytetรครคn yhdessรค Error Collectorin kanssa:

@Rule				
public ErrorCollector collector= new ErrorCollector();

Esimerkki ErrorCollectorista

Ymmรคrtรครคksemme virheenkerรครคjรคn, luodaan luokka ja sรครคntรถ kaikkien virheiden kerรครคmiseksi. Lisรครคt kaikki virheet kรคyttรคmรคllรค addError(throwable) -toimintoa tรคhรคn.

Katso alla koodi, joka yksinkertaisesti luo sรครคnnรถn, joka ei ole muuta kuin "Error Collector -objektin" luominen. Sitรค kรคytetรครคn edelleen lisรครคmรครคn kaikki virheet ongelman ilmoittamiseksi lopussa:

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

Lisรคtรครคn yllรค oleva testiluokka testirunneriin ja suoritetaan se kerรครคmรครคn kaikki virheet. Katso alla oleva koodi:

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());							
   }		
}      

lรคhtรถ:

Katso epรคonnistuminen trace joka trackaikki virheet yhdessรค paikassa:

TestRunner.Java ulostulo

Edut JUnit ErrorCollector

Voit kรคyttรครค JUnit vรคite toiminnallista tai graafista kรคyttรถliittymรครค varten, esim

  1. assertEquals(merkkijonoviesti, odotettu objekti, todellinen objekti), jotka vertaavat, ettรค kaksi objektia ovat yhtรค suuret.
  2. Vastaavasti assertTrue(Boolen ehto) vakuuttaa, ettรค ehto on tosi.

Vรคitettรค kรคyttรคmรคllรค validointitestistรค tulee helppoa. Mutta yksi suuri ongelma on, ettรค testin suorittaminen pysรคhtyy, vaikka yksittรคinen vรคite epรคonnistuisi.

Testauksen jatkuvuus ja palautuksen kรคsittely ovat ratkaisevan tรคrkeitรค testiautomaation onnistumisen kannalta. Error Collector on paras tapa kรคsitellรค tรคllaisia โ€‹โ€‹skenaarioita.

Yhteenveto

  • Junitin virheenkerรคin mahdollistaa testin jatkamisen, vaikka ensimmรคinen ongelma lรถydetรครคn ja testi epรคonnistuu lopussa
  • Virhekerรคilijรค kerรครค kaikki virheobjektit ja raportoi siitรค vasta, loppujen lopuksi testin suoritus on ohi
  • Kaikkien virheiden lisรครคminen Error Collectoriin on se etu, ettรค voit tarkistaa kaikki virheet kerralla
  • Virheenkerรคilijรค yksinkertaisesti lisรครค virheet ErrorCollector.javan tarjoamalla menetelmรคllรค addError(throwable err).

Tiivistรค tรคmรค viesti seuraavasti: