Egyéni JUnit 4 tesztfutók

1. Áttekintés

Ebben a rövid cikkben arra fogunk koncentrálni, hogy miként futtathatjuk a JUnit teszteket egyedi tesztfuttatók segítségével.

Egyszerűen fogalmazva, az egyedi futó megadásához a @RunWith annotáció.

2. Előkészítés

Kezdjük a szabvány hozzáadásával JUnit függőség a mi pom.xml:

 junit junit 4.12 

3. Egyéni futó megvalósítása

A következő példában megmutatjuk, hogyan kell megírni saját szokásainkat Futó - és futtassa a @ használatávalRunWith.

A JUnit Runner olyan osztály, amely kiterjeszti a JUnit absztraktját Futó osztály és felelős a JUnit tesztek futtatásáért, jellemzően reflexióval.

Itt absztrakt módszereket valósítunk meg Futó osztály:

a TestRunner nyilvános osztály kiterjeszti a Runner {private Class testClass; public TestRunner (Class testClass) {super (); this.testClass = testClass; } @Orride public Description getDescription () {return Description .createTestDescription (testClass, "A futóm leírása"); } @Orride public void run (RunNotifier notifier) ​​{System.out.println ("a MyRunner tesztjeinek futtatása:" + testClass); próbáld ki az {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 (e kivétel) {dob új RuntimeException (e); }}}

A getDescription módszer öröklődik Leírható és visszaadja a Leírás amely tartalmazza azokat az információkat, amelyeket később exportálnak, és amelyeket különféle eszközök felhasználhatnak.

Ban,-ben fuss megvalósításához a reflexió segítségével a célteszt módszereket hívjuk meg.

Meghatároztunk egy konstruktort, amely a Osztály érv; ez a JUnit követelménye. Futás közben a JUnit átadja a célteszt osztályt ennek a konstruktornak.

RunNotifier olyan események kilövésére szolgál, amelyeknek információi vannak a teszt előrehaladásáról.

Használjuk a futót a tesztosztályunkban:

public class Calculator {public int add (int a, int b) {return a + b; }} @RunWith (TestRunner.class) public class CalculatorTest {Számológép kalkulátor = új Számológép (); @Test public void testAddition () {Syste.out.println ("in testAddition"); assertEquals ("hozzáadás", 8, számológép.add (5, 3)); }}

Az eredményt kapjuk:

-------------------------------------------------- ----- VIZSGÁLATOK -------------------------------------------- ----------- com.baeldung.junit.CalculatorTeszt futtatása a MyRunner tesztjeitől: com com.baeldung.junit.CalculatorTest a testAddition teszteken fut: 1, hibák: 0, hibák: 0, kihagyva: 0, Eltelt idő: 0,002 mp Eredmények: Futtatott tesztek: 1, Hibák: 0, hibák: 0, kihagyott: 0

4. Speciális futók

Az alacsony szint kiterjesztése helyett Futó osztály, ahogy az utolsó példában tettük, kiterjeszthetjük az egyik speciális alosztályát Futó: ParentRunner vagy BlockJUnit4Runner.

Az elvont ParentRunner osztály hierarchikus módon futtatja a teszteket.

BlockJUnit4Runner egy konkrét osztály, és ha bizonyos módszereket inkább testre szabunk, valószínűleg kibővítjük ezt az osztályt.

Lássuk ezt egy példával:

public class BlockingTestRunner kiterjeszti a BlockJUnit4ClassRunner {public BlockingTestRunner (Class class) dobja az InitializationError {super (klass) parancsot; } @Orride védett Statement methodInvoker (FrameworkMethod módszer, Object test) {System.out.println ("invoking:" + method.getName ()); return super.methodInvoker (módszer, teszt); }}

Osztály megjegyzésével @RunWith (JUnit4.class) mindig az alapértelmezett JUnit 4 futót hívja meg a JUnit jelenlegi verziójában; ez az osztály álnevet ad a jelenlegi alapértelmezett JUnit 4 osztály futónak:

@RunWith (JUnit4.class) public class CalculatorTest {Számológép kalkulátor = új Számológép (); @Test public void testAddition () {assertEquals ("hozzáadás", 8, számológép.add (5, 3)); }}

5. Következtetés

A JUnit Runners rendkívül alkalmazkodó és lehetővé teszi a fejlesztő számára, hogy megváltoztassa a teszt végrehajtási eljárását és az egész tesztfolyamatot.

Ha csak kisebb változtatásokat akarunk végrehajtani, akkor érdemes áttekinteni a BlockJUnit4Class futó.

A futók néhány népszerű harmadik fél általi felhasználása a következőkre terjed ki: SpringJUnit4ClassRunner, MockitoJUnitRunner, HierarchicalContextRunner, Uborkafutó és még sok más.

Ezeknek a példáknak és kódrészleteknek a megvalósítása megtalálható a GitHub projektben - ez egy Maven projekt, ezért könnyen importálhatónak és futtathatónak kell lennie.