Prispôsobené testovacie bežce JUnit 4

1. Prehľad

V tomto rýchlom článku sa zameriame na to, ako spustiť testy JUnit pomocou vlastných testovacích bežcov.

Jednoducho povedané, aby sme mohli určiť vlastného bežca, budeme musieť použiť @RunWith anotácia.

2. Príprava

Začnime pridaním normy JUnit závislosť do našej pom.xml:

 junit junit 4.12 

3. Implementácia vlastného bežca

V nasledujúcom príklade si ukážeme, ako napísať svoj vlastný zvyk Bežec - a spustite ho pomocou @RunWith.

JUnit Runner je trieda, ktorá rozširuje abstrakt JUnit Bežec triedy a je zodpovedná za vykonávanie testov JUnit, zvyčajne pomocou reflexie.

Tu implementujeme abstraktné metódy Bežec trieda:

verejná trieda TestRunner rozširuje Runner {private Class testClass; public TestRunner (Class testClass) {super (); this.testClass = testClass; } @Override public Description getDescription () {return Description .createTestDescription (testClass, "My runner description"); } @Override public void run (RunNotifier notifikátor) {System.out.println ("spustenie testov z MyRunner:" + testClass); try {Object testObject = testClass.newInstance (); for (Method method: testClass.getMethods ()) {if (method.isAnnotationPresent (Test.class)) {notifier.fireTestStarted (Description .createTestDescription (testClass, method.getName ())); method.invoke (testObject); notifier.fireTestFinished (Description .createTestDescription (testClass, method.getName ())); }}} catch (Výnimka e) {hodiť novú RuntimeException (e); }}}

The getDescription metóda sa dedí z Popísateľné a vráti a Popis ktorý obsahuje informácie, ktoré sa neskôr exportujú a môžu byť použité rôznymi nástrojmi.

V bežať implementácie, odvolávame sa na cieľové testovacie metódy pomocou reflexie.

Definovali sme konštruktor, ktorý berie a Trieda argument; toto je požiadavka JUnitu. Za behu JUnit odovzdá cieľovú testovaciu triedu tomuto konštruktoru.

RunNotifier sa používa na spustenie udalostí, ktoré obsahujú informácie o priebehu testu.

Použime bežca v našej testovacej triede:

public class Calculator {public int add (int a, int b) {return a + b; }} @RunWith (TestRunner.class) verejná trieda CalculatorTest {Kalkulačka kalkulačka = nová Kalkulačka (); @Test public void testAddition () {Syste.out.println ("v testAddition"); assertEquals ("addition", 8, calculator.add (5, 3)); }}

Výsledok, ktorý dostaneme:

-------------------------------------------------- ----- TESTY -------------------------------------------- ----------- Spustenie com.baeldung.junit.CalculatorTest spustenie testov z MyRunner: trieda com.baeldung.junit.CalculatorTest v testAdAd Spustenie testov: 1, Zlyhania: 0, Chyby: 0, Vynechané: 0, uplynulý čas: 0,002 s Výsledky: počet testov: 1, zlyhania: 0, chyby: 0, preskočenie: 0

4. Špecializovaní bežci

Namiesto rozširovania nízkej úrovne Bežec triedy, ako sme to urobili v poslednom príklade, môžeme rozšíriť jednu zo špecializovaných podtried triedy Bežec: ParentRunner alebo BlockJUnit4Runner.

Abstrakt ParentRunner trieda spúšťa testy hierarchicky.

BlockJUnit4Runner je konkrétna trieda a ak uprednostňujeme prispôsobenie určitých metód, pravdepodobne túto triedu rozšírime.

Pozrime sa na príklad:

public class BlockingTestRunner rozširuje BlockJUnit4ClassRunner {public BlockingTestRunner (Class klass) hodí InitializationError {super (klass); } @Override chránený Statement methodInvoker (FrameworkMethod metóda, Object test) {System.out.println ("invoking:" + method.getName ()); návrat super.methodInvoker (metóda, test); }}

Anotácia triedy s @RunWith (JUnit4.class) vždy vyvolá predvoleného bežca JUnit 4 v aktuálnej verzii JUnit; táto trieda aliasy súčasného predvoleného bežca triedy JUnit 4:

@RunWith (JUnit4.class) verejná trieda CalculatorTest {Kalkulačka kalkulačka = nová Kalkulačka (); @Test public void testAddition () {assertEquals ("addition", 8, calculator.add (5, 3)); }}

5. Záver

JUnit Runners sú vysoko prispôsobivé a umožňujú vývojárovi zmeniť postup vykonania testu a celý testovací proces.

Ak chceme urobiť iba menšie zmeny, je dobré pozrieť sa na chránené metódy BlockJUnit4Class bežec.

Niektoré populárne implementácie bežcov tretích strán na použitie zahŕňajú SpringJUnit4ClassRunner, MockitoJUnitRunner, HierarchicalContextRunner, Uhorkový bežec a oveľa viac.

Implementáciu všetkých týchto príkladov a útržkov kódu nájdete v projekte GitHub - jedná sa o projekt Maven, takže by malo byť ľahké ho importovať a spustiť tak, ako je.


$config[zx-auto] not found$config[zx-overlay] not found