JUnit ErrorCollector @Rule esimerkin kanssa

โšก ร„lykรคs yhteenveto

JUnit ErrorCollector on sรครคntรถ, joka sallii testin jatkua epรคonnistumisen jรคlkeen, kerรครคmรคllรค kaikki virheobjektit ja raportoimalla ne yhdessรค testimetodin pรครคttymisen jรคlkeen sen pysรคyttรคmisen sijaan.ping ensimmรคisen ongelman kohdalla.

  • ๐Ÿ”˜ Tarkoitus: Jatka testiรค vรคitteen, verkon tai graafisen kรคyttรถliittymรคn tarkistuksen epรคonnistumisen jรคlkeen ja raportoi sitten kaikki kerรคtyt virheet kerralla.
  • โ˜‘๏ธ ilmoitus: Julkisen, ei-staattisen ErrorCollector-kentรคn @Rule-sรครคntรถ kertoo JUnit liittรครคksesi sรครคnnรถn jokaiseen testiin.
  • โœ… Kerรคtรค: addError(Throwable) tallentaa kaikki virheet ja poikkeukset, koska Throwable on molempien vanhempi.
  • ๐Ÿงช Tarkistetaan: checkThat() arvioi parin ja tallentaa epรคsuhtaisuuden keskeyttรคmรคttรค jรคljellรค olevia lauseita.
  • ๐Ÿ› ๏ธ raportointi: Epรคonnistuminen trace listaa jokaisen kerรคtyn heittokohteen omalla rivinumerollaan JUnit nรคkymรค.
  • ๐Ÿ“Œ JUnit 5: Jupiterin sรครคnnรถt on poistettu, joten assertAll()- tai AssertJ SoftAssertions -funktioilla on sama rooli.

JUnit ErrorCollector-sรครคntรถ, joka kerรครค useita virheitรค yhden testiajon aikana

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

Mutta JUnit on hieman erilainen lรคhestymistapa. JUnit virheiden kerรครคjรคn avulla voit jatkaa testin suorittamista, vaikka ongelma lรถydettรคisiin tai testi epรคonnistuisi. Virheiden kerรครคjรค kerรครค kaikki virheobjektit ja raportoi ne vain kerran testin suorituksen pรครคtyttyรค.

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

Testiskriptiรค kirjoitettaessa on tรคrkeรครค suorittaa kaikki testit, vaikka jokin koodirivi epรคonnistuisi verkkoyhteyden katkeamisen, vahvistusvirheen tai muun syyn vuoksi. Tรคllaisessa tilanteessa voit silti jatkaa testiskriptin suorittamista kรคyttรคmรคllรค palvelun tarjoamaa erityisominaisuutta. JUnit tunnetaan "virheiden kerรครคjรคnรค".

Tรคtรค varten, JUnit kรคyttรครค @Sรครคnnรถn huomautus, jota kรคytetรครคn virheidenkerรครคjรคn objektin luomiseen. Kun virheidenkerรครคjรคn objekti on luotu, voit helposti lisรคtรค kaikki virheet objektiin kรคyttรคmรคllรค metodia addError (heitettรคvรค virhe)Kuten tiedรคt, Heitettรคvรค on superluokka Poikkeus ja Virhe luokat JavaKun lisรครคt virheitรค tรคllรค tavalla, ne kirjataan lokiin. JUnit testitulos.

Kaikkien virheiden lisรครคmisen etuna virheiden kerรครคjรครคn on, ettรค voit tarkistaa kaikki virheet kerralla. Lisรคksi, jos skripti epรคonnistuu kesken suorituksen, suoritus jatkuu silti testimetodin loppuun asti.

HuomautuksiaYksinkertaista assert- tai try/catch-lohkoa kรคytettรคessรค virheenkerรครคjรคmetodin 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 virheet kyseiseen objektiin. 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.		
    }		
}	

Huomautus: tรคmรค on havainnollistava esimerkkitract, ei kรครคnnettรคvรค tiedosto. Sen lopussa oleva kommentti rivittyy toiselle riville ilman aloittavaa //-merkkiรค, eikรค getResults()-funktiota tai Hamcrest-tuloksia nรคytetรค. Tรคydellinen suoritettava versio seuraa alla. Esimerkki ErrorCollectorista.

Mikรค on @Rule-funktio? JUnit?

JUnit tarjoaa erityisen testien kรคsittelytavan, Testitapaus tai testipaketin avulla @Sรครคnnรถn huomautus@Rule-komennon avulla voit helposti lisรคtรค tai mรครคrittรครค uudelleen testin toiminnan.

Sisรครคnrakennettuja sรครคntรถjรค on useita, ja JUnit API, jota testaaja voi kรคyttรครค, ja voit myรถs kirjoittaa oman sรครคnnรถn. Sรครคntรถkentรคn on oltava julkinen, ei-staattinen ja tyyppiรค, joka toteuttaa TestRulen.

Katso alla oleva koodirivi, joka nรคyttรครค, miten @Rule-annotaatiota kรคytetรครคn yhdessรค virheiden kerรครคjรคn kanssa:

@Rule				
public ErrorCollector collector= new ErrorCollector();

JUnit Vuoden 5 huomautus: Jupiter korvasi sรครคnnรถt Extension API:lla, joten @Rule- ja ErrorCollector-muuttujat puuttuvat tiedostosta org.junit.jupiter. Lรคhimmรคt vastineet ovat Assertions.assertAll() ja AssertJ SoftAssertions. JUnit Tรคssรค esitetty 4-koodi toimii edelleen vanhan moottorin lรคpi. Katso JUnit merkinnรคt koko kartan opastusvideoping.

Esimerkki ErrorCollectorista

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

Katso alla olevaa koodia, joka yksinkertaisesti luo sรครคnnรถn, joka on vain "virheidenkerรครคjรคobjekti". Sitรค kรคytetรครคn edelleen kaikkien virheiden lisรครคmiseen ongelman raportoimiseksi 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 testisuorittimeen ja suoritetaan se kaikkien virheiden kerรครคmiseksi. 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. JUnit nรคkymรค laskee yhden suorituksen, mutta raportoi kaksi virhettรค ja yhden epรคonnistumisen, joilla kullakin on oma rivinumeronsa:

Eclipse JUnit vika traclistataan kaksi Throwable-virhettรค ja yksi AssertionError, jotka on kerรคtty yhdellรค ajolla

Edut JUnit ErrorCollector

Voit kรคyttรครค a JUnit vรคite toiminnallista tai graafisen kรคyttรถliittymรคn validointia varten, esimerkiksi:

  1. assertEquals(String message, Object expected, Object actual), joka vertaa kahden olion vรคlisiรค yhtรคlรคisyyksiรค.
  2. Vastaavasti assertTrue(Boolen ehto) vakuuttaa, ettรค ehto on tosi.

Vรคittรคmien avulla validointitestaus on helppoa. Yksi merkittรคvรค ongelma on kuitenkin se, ettรค testin suoritus pysรคhtyy, vaikka yksikin vรคite epรคonnistuisi.

Testien jatkuvuus ja palautumisen hallinta on ratkaisevan tรคrkeรครค testiautomaation onnistumiselle, ja sillรค on suurin merkitys pitkรคllรค aikavรคlillรค. Selenium tyรถnkulkuja, joissa selaimen uudelleenkรคynnistรคminen jokaisen epรคonnistuneen tarkistuksen jรคlkeen on kallista. Virheiden kerรครคjรค on paras tapa kรคsitellรค tรคllaisia โ€‹โ€‹tilanteita.

UKK

addError(Throwable) tallentaa jo havaitsemasi tai luomasi virheen. checkThat(value, matcher) arvioi Hamcrest-matcherin ja tallentaa automaattisesti epรคsuhtaisuuden, joten se luetaan vรคitteenรค, mutta sallii silti jรคljellรค olevien lausekkeiden suorittamisen.

Kyllรค. Metodi suoritetaan loppuun asti, sitten JUnit merkitsee sen epรคonnistuneeksi ja tulostaa kaikki kerรคtyt heitettรคvรคt objektit epรคonnistumisen yhteydessรค trace. Esimerkkikuvakaappauksessa raportoidaan kaksi virhettรค ja yksi epรคonnistuminen yhdestรค testimenetelmรคstรค.

JUnit skannaa testiluokasta @Rule-annotoituja julkisia instanssikenttiรค ja soveltaa niitรค jokaisen testimetodin ympรคrille. Yksityinen tai staattinen kenttรค jรคtetรครคn huomiotta, ja JUnit aiheuttaa alustusvirheen testin suorittamisen sijaan.

Ei. Jupiter poisti sรครคntรถmekanismin, joten org.junit.rules.ErrorCollector on olemassa vain JUnit 4. Kรคytรค Assertions.assertAll()-funktiota ryhmitellyille vรคitteille tai lisรครค AssertJ SoftAssertions -funktioita, kun tarvitaan monipuolisempia yhteensopivuuksia.

Kyllรค, ja se on yleinen kaava. Useita kenttiรค sisรคltรคvรค sivu voidaan validoida yhdellรค kertaa, jolloin kaikki ristiriidat kerรคtรครคn sen sijaan, ettรค prosessi keskeytetรครคn ensimmรคisen virheen jรคlkeen. Nรคin vรคltetรครคn selainistunnon uudelleenkรคynnistys jokaisen lรถydetyn virheen vuoksi.

Molemmat lykkรครคvรคt raportointia, mutta SoftAssert vaatii eksplisiittisen assertAll()-kutsua testin lopussa, kun taas ErrorCollector raportoi automaattisesti, kun metodi palauttaa arvon. assertAll()-kutsu unohtuu TestNG peittรครค epรคonnistumiset hiljaa.

Tekoรคlyavustajien ryhmรค on pitkรครคn epรคonnistunut tracperimmรคisen syyn perusteella, joten kaksikymmentรค kerรคttyรค heitettรคvรครค virhettรค supistuu muutamaan erilliseen virheeseen. Ne myรถs viittaavat siihen, mitkรค tarkistukset kuuluvat yhteen kerรคttyyn testiajoon erillisten testien sijaan.

GitHub Copilot kirjoittaa @Rule-kentรคn helposti, mutta usein se sekoittaa sen Jupiter-testiluokkaan, jossa ei ole sรครคntรถjรค. Varmista, ettรค tuonnit ovat org.junit-tiedostosta ennen sarjan suorittamista.

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