Prilagođeni JUnit 4 test trkači

1. Pregled

U ovom ćemo se brzom članku usredotočiti na to kako pokrenuti JUnit testove pomoću prilagođenih pokretačkih programa.

Jednostavno rečeno, da bismo odredili prilagođeni pokretač, trebat ćemo koristiti @RunWith bilješka.

2. Priprema

Počnimo s dodavanjem standarda JUNIT ovisnost o našoj pom.xml:

 junit junit 4.12 

3. Implementacija prilagođenog pokretača

U sljedećem ćemo primjeru pokazati kako napisati vlastiti običaj Trkač - i pokrenite ga pomoću @RunWith.

JUnit Runner je klasa koja proširuje JUnitov sažetak Trkač klase i odgovoran je za pokretanje JUnit testova, obično koristeći refleksiju.

Ovdje provodimo apstraktne metode Trkač razred:

javna klasa TestRunner proširuje Runner {private Class testClass; javni TestRunner (Class testClass) {super (); this.testClass = testClass; } @Override public Description getDescription () {return Description .createTestDescription (testClass, "My runner description"); } @Override public void run (RunNotifier notifier) ​​{System.out.println ("pokretanje testova iz MyRunnera:" + testClass); isprobajte {Object testObject = testClass.newInstance (); za (Metoda metode: testClass.getMethods ()) {if (method.isAnnotationPresent (Test.class)) {notifier.fireTestStarted (Opis .createTestDescription (testClass, method.getName ())); method.invoke (testObject); notifier.fireTestFinished (Opis .createTestDescription (testClass, method.getName ())); }}} catch (Iznimka e) {baciti novi RuntimeException (e); }}}

The getDescription metoda nasljeđuje se iz Opisljivo i vraća a Opis koji sadrži podatke koji se kasnije izvoze i mogu se koristiti raznim alatima.

U trčanje implementacije, pozivamo se na ciljne metode ispitivanja pomoću refleksije.

Definirali smo konstruktor koji uzima a Razred argument; ovo je zahtjev JUnit-a. Tijekom izvođenja, JUnit će proslijediti ciljnu testnu klasu ovom konstruktoru.

RunNotifier koristi se za ispaljivanje događaja koji imaju informacije o napretku testa.

Upotrijebimo trkač u našoj testnoj klasi:

Kalkulator javne klase {public int add (int a, int b) {return a + b; }} @RunWith (TestRunner.class) javna klasa CalculatorTest {Kalkulator kalkulator = novi kalkulator (); @Test public void testAddition () {Syste.out.println ("in testAddition"); assertEquals ("zbrajanje", 8, kalkulator.add (5, 3)); }}

Rezultat koji dobivamo:

-------------------------------------------------- ----- TESTOVI -------------------------------------------- ----------- Pokretanje com.baeldung.junit.CalculatorTest pokretanje testova iz MyRunner: class com.baeldung.junit.CalculatorTest in testAddition Testovi pokrenuti: 1, Kvarovi: 0, Pogreške: 0, Preskočeni: 0, proteklo vrijeme: 0,002 sek Rezultati: Pokrenuti testovi: 1, neuspjesi: 0, pogreške: 0, preskočeni: 0

4. Specijalizirani trkači

Umjesto da produži nisku razinu Trkač razreda, kao što smo to učinili u prošlom primjeru, možemo proširiti jednu od specijaliziranih podklasa za Trkač: ParentRunner ili BlockJUnit4Runner.

Sažetak ParentRunner klasa provodi testove na hijerarhijski način.

BlockJUnit4Runner je konkretna klasa i ako radije prilagodimo određene metode, vjerojatno ćemo je proširiti.

Pogledajmo to na primjeru:

javna klasa BlockingTestRunner proširuje BlockJUnit4ClassRunner {public BlockingTestRunner (klasa klase) baca InitializationError {super (klass); } @Override zaštićena izjava methodInvoker (metoda FrameworkMethod, test objekta) {System.out.println ("pozivanje:" + method.getName ()); return super.methodInvoker (metoda, test); }}

Bilježenje razreda s @RunWith (JUnit4.class) uvijek će pozivati ​​zadani pokretač JUnit 4 u trenutnoj verziji JUnit; ova klasa zamjenjuje trenutni zadani pokretač klase JUnit 4:

@RunWith (JUnit4.class) javna klasa CalculatorTest {Kalkulator kalkulator = novi kalkulator (); @Test public void testAddition () {assertEquals ("adicija", 8, kalkulator.add (5, 3)); }}

5. Zaključak

JUnit Runners vrlo su prilagodljivi i dopuštaju programeru da promijeni postupak izvođenja testa i cijeli postupak testa.

Ako želimo napraviti samo manje izmjene, dobra je ideja pogledati zaštićene metode BlockJUnit4Class trkač.

Neke popularne implementacije pokretačkih programa treće strane za upotrebu uključuju SpringJUnit4ClassRunner, MockitoJUnitRunner, HierarchicalContextRunner, Trkač krastavaca i mnogo više.

Provedbu svih ovih primjera i isječaka koda možete pronaći u projektu GitHub - ovo je Maven projekt, pa bi ga trebalo lako uvesti i pokrenuti kakav jest.