JUnit ErrorCollector @Rule példával

⚡ Okos összefoglaló

JUnit Az ErrorCollector egy olyan szabály, amely lehetővé teszi a teszt folytatását egy hiba után, összegyűjti az összes hibaobjektumot, és együtt jelenti azokat, amikor a tesztmetódus befejeződött a leállás helyett.ping az első problémánál.

  • 🔘 Cél: Folytassa a tesztet egy állítás, hálózati vagy grafikus felhasználói felület ellenőrzésének sikertelensége után, majd jelentse az összes összegyűjtött hibát egyszerre.
  • ☑️ Nyilatkozat: A nyilvános, nem statikus ErrorCollector mezőre vonatkozó @Rule utasítás megmondja, hogy JUnit hogy minden teszthez csatolja a szabályt.
  • Gyűjtő: Az addError(Throwable) függvény minden hibát vagy kivételt tárol, mivel a Throwable mindkettő szülője.
  • 🧪 Ellenőrzés: A checkThat() függvény kiértékel egyezést mutató függvényt, és a fennmaradó utasítások megszakítása nélkül rögzíti az eltérést.
  • 🇧🇷 Jelentés: A hiba tracaz e listázza az összegyűjtött dobható tárgyakat a saját sorszámával a JUnit Kilátás.
  • 📌 JUnit 5: A Jupiterből kikerültek a szabályok, így az assertAll() vagy az AssertJ SoftAssertions ugyanazt a szerepet játsszák.

JUnit ErrorCollector szabály, amely több hibát gyűjt egyetlen tesztfutás során

Normál forgatókönyv esetén, ha bármilyen hibát észlel a teszt végrehajtása során, leállítja a tesztet, kijavítja a hibát, és újra lefuttatja a tesztet.

De JUnit kissé eltérő megközelítést alkalmaz. JUnit hibagyűjtővel folytathatja a teszt végrehajtását akkor is, ha problémát talál, vagy a teszt sikertelen. A hibagyűjtő összegyűjti az összes hibaobjektumot, és csak egyszer jelenti azokat, a teszt végrehajtásának befejezése után.

Miért használja az Error Collectort?

Tesztszkript írása közben minden tesztet végre kell hajtani, még akkor is, ha bármelyik kódsor hálózati hiba, ellenőrzési hiba vagy bármilyen más ok miatt meghiúsul. Ebben az esetben a tesztszkript végrehajtása továbbra is folytatható a(z) JUnit „hibagyűjtőként” ismert.

Ezért, JUnit használja az @Szabály megjegyzés, amely egy hibagyűjtő objektum létrehozására szolgál. Miután a hibagyűjtő objektum létrejött, a metódus segítségével könnyedén hozzáadhatja az összes hibát az objektumhoz. addError (dobható hiba). Amint tudod, Dobható a szuperosztálya a kivétel és a hiba osztályok JavaAmikor ilyen módon ad hozzá hibákat, ezek a hibák naplózva lesznek a JUnit teszteredmény.

Az összes hiba Error Collectorba való felvételének az az előnye, hogy egyszerre ellenőrizheti az összes hibát. Továbbá, ha a szkript közben meghiúsul, a végrehajtás a tesztelési metódus végéig folytatódik.

MegjegyzésekEgyszerű assert vagy try/catch blokk használata esetén a hibagyűjtő metódus nem használható.

Minta kód

A Hibagyűjtővel kapcsolatos további információkért lásd az alábbi kódpéldát, amely bemutatja, hogyan hozhat létre egy Hibagyűjtő objektumot, és hogyan adhat hozzá az összes hibát ehhez az objektumhoz. track a probléma:

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

Jegyzet: ez egy szemléltető példatract, nem egy lefordítható fájl. A záró kommentje egy második sorba tördelődik, kezdő // nélkül, és a getResults() függvény, valamint a Hamcrest egyezők nem jelennek meg. A teljes futtatható verzió az alábbiakban található. Példa az ErrorCollector használatára.

Mi az a @Rule a következőben: JUnit?

JUnit speciális tesztkezelést biztosít, Teszt eset vagy tesztcsomagot a @Szabály megjegyzésA @Rule használatával könnyedén hozzáadhatod vagy újradefiniálhatod a teszt viselkedését.

Számos beépített szabály létezik, amelyeket a JUnit API, amelyet egy tesztelő használhat, és saját szabályt is írhatsz. A szabálymezőnek nyilvánosnak, nem statikusnak és TestRule-t megvalósító típusúnak kell lennie.

Lásd az alábbi kódsort, amely bemutatja, hogyan kell használni a @Rule annotációt az Error Collectorral együtt:

@Rule				
public ErrorCollector collector= new ErrorCollector();

JUnit 5-os megjegyzés: A Jupiter a szabályokat az Extension API-val helyettesítette, így az @Rule és az ErrorCollector nem létezik az org.junit.jupiter fájlban. A legközelebbi megfelelőik az Assertions.assertAll() és az AssertJ SoftAssertions. A JUnit Az itt látható 4-es kód még mindig fut a veterán motoron. Lásd a JUnit annotációk oktatóanyag a teljes térképhezping.

Példa az ErrorCollector használatára

A hibagyűjtő megértéséhez hozzunk létre egy osztályt és egy szabályt az összes hiba összegyűjtésére. Itt az addError(throwable) használatával adhatjuk hozzá az összes hibát.

Lásd az alábbi kódot, amely egyszerűen létrehoz egy szabályt, ami nem más, mint egy „Hibagyűjtő objektum”. Továbbá arra szolgál, hogy az összes hibát hozzáadja, hogy a probléma a végén jelentést készítsen:

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

Adjuk hozzá a fenti tesztosztályt egy tesztfuttatóhoz, és futtassuk le az összes hiba összegyűjtéséhez. Lásd az alábbi kódot:

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

output:

Lásd a kudarcot trace, amely tracminden hibát egy helyen. JUnit A nézet egy futtatást számol, de két hibát és egy sikertelenséget jelez, mindegyiket saját sorszámmal:

Eclipse JUnit kudarc trackét Throwable hibát és egy AssertionErrort sorolunk fel egyetlen futtatás során

Előnyei JUnit ErrorCollector

Használhatja a JUnit kijelentés funkcionális vagy grafikus felhasználói felület validációjához, például:

  1. assertEquals(String üzenet, Várt objektum, Aktuális objektum), amely összehasonlítja, hogy két objektum egyenlő-e.
  2. Hasonlóképpen, az assertTrue(logikai feltétel) azt állítja, hogy egy feltétel igaz.

Az állítások használatával a validációs tesztelés egyszerűvé válik. Az egyik fő probléma azonban az, hogy a teszt végrehajtása akkor is leáll, ha egyetlen állítás is meghiúsul.

A tesztfolytonosság és a helyreállítás kezelése kulcsfontosságú a tesztautomatizálás sikeréhez, és hosszú távú környezetben a legfontosabb. Selenium olyan folyamatokat, ahol a böngésző újraindítása minden sikertelen ellenőrzés után költséges. Az Error Collector a legjobb módja az ilyen forgatókönyvek kezelésének.

GYIK

Az addError(Throwable) egy már észlelt vagy létrehozott hibát rögzít. A checkThat(value, matcher) kiértékel egy Hamcrest egyeztetőt, és automatikusan rögzíti az eltérést, így egy állításként olvasható, miközben a fennmaradó utasítások továbbra is futhatnak.

Igen. A metódus ezután a befejezésig fut. JUnit megjelöli, hogy sikertelen, és kiírja az összes összegyűjtött, a hibához tartozó dobható objektumot trace. A példa képernyőképe két hibát és egy kudarcot jelez egyetlen tesztmetódusból.

JUnit átvizsgálja a tesztosztályt a @Rule-lal annotált nyilvános példánymezők után, és mindegyiket alkalmazza minden tesztmetódus körül. A privát vagy statikus mezőket figyelmen kívül hagyja, és JUnit inicializálási hibát jelez a teszt futtatása helyett.

Nem. A Jupiter elhagyta a szabálymechanizmust, így az org.junit.rules.ErrorCollector csak a következőben létezik: JUnit 4. Csoportosított állításokhoz használja az Assertions.assertAll() függvényt, vagy adjon hozzá AssertJ SoftAssertions függvényeket, ha gazdagabb egyezőségre van szükség.

Igen, és ez egy gyakori minta. Egy több mezőt tartalmazó oldal egyetlen menetben validálható, minden eltérést összegyűjtve ahelyett, hogy az első hibánál megszakítaná a folyamatot, így elkerülhető a böngésző munkamenetének újraindítása minden egyes talált hiba esetén.

Mindkettő elhalasztja a jelentéskészítést, de a SoftAssert explicit assertAll() hívást igényel a teszt végén, míg az ErrorCollector automatikusan jelenti, amikor a metódus visszatér. Az assertAll() elfelejtése a következőben: TestNG csendben elrejti a kudarcokat.

A mesterséges intelligencia asszisztenseinek csoportja hosszú kudarcot vallott trackiváltó ok miatt, így húsz összegyűjtött dobható hiba néhány különálló hibára redukálódik. Azt is sugallják, hogy mely ellenőrzések tartoznak össze egyetlen összegyűjtött futtatásba, ahelyett, hogy különálló tesztekbe tartoznának.

GitHub másodpilóta A @Rule mezőt könnyen kiírja, de gyakran belekeveri egy Jupiter tesztosztályba, ahol nincsenek szabályok. A csomag futtatása előtt győződjön meg arról, hogy az importált elemek org.junit típusúak.

Foglald össze ezt a bejegyzést a következőképpen: