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.
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:
Edut JUnit ErrorCollector
Voit kรคyttรครค a JUnit vรคite toiminnallista tai graafisen kรคyttรถliittymรคn validointia varten, esimerkiksi:
- assertEquals(String message, Object expected, Object actual), joka vertaa kahden olion vรคlisiรค yhtรคlรคisyyksiรค.
- 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.

