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: