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.