Statikus módszer megcsalása JMockit használatával
1. Áttekintés
Néhány népszerű gúnyos könyvtár, mint például a Mockito és az Easymock, a Java örökség alapú osztálymodelljének kihasználásával modelleket generál. EasyMock futás közben valósít meg egy interfészt, míg Mockito örököl a célosztálytól, hogy gúnyos csonkot hozzon létre.
Egyik megközelítés sem működik jól a statikus módszereknél, mivel a statikus módszerek társultak egy osztályhoz, és nem írhatók felül. Azonban, A JMockit statikus módszerrel kigúnyolja a funkciókat.
Ebben az oktatóanyagban megvizsgáljuk ezeknek a funkcióknak néhányat.
A JMockit bemutatásához olvassa el előző cikkünket.
2. Maven-függőségek
Kezdjük a Maven-függőségekkel:
org.jmockit jmockit 1.24 teszt
A könyvtárak legújabb verzióit a Maven Central oldalon találja meg.
3. Statikus módszer hívása nem statikus módszerből
Először is vizsgáljuk meg azt az esetet, amikor van egy nem statikus módszerrel rendelkező osztály, amely belsőleg a statikus módszertől függ:
public class AppManager {public boolean managerResponse (String question) {return AppManager.isResponsePositive (kérdés); } public static boolean isResponsePositive (String value) {if (value == null) {return false; } int hossz = érték.hossz (); int randomNumber = randomNumber (); visszatérési hossz == randomNumber? igaz hamis; } private static int randomNumber () {return new Random (). nextInt (7); }}
Most szeretnénk kipróbálni a módszert managerResponse (). Mivel a visszatérési értéke egy másik módszertől függ, meg kell csúfolni a isResponsePositive () módszer.
Ezzel a statikus módszerrel gúnyolódhatunk JMockit névtelen osztály mockit.MockUp.MockUp (ahol T lesz az osztály neve) és @Mock kommentár:
@Test public void givenAppManager_whenStaticMethodCalled_thenValidateExpectedResponse () {new MockUp () {@Mock public boolean isResponsePositive (String value) {return false; }}; assertFalse (appManager.managerResponse ("Néhány karakterlánc ...")); }
Itt gúnyolódunk a isResponsePositive () visszatérési értékkel, amelyet a teszthez használni szeretnénk. Ezért a várt eredmény igazolása a Állítások a Junit-5-ben elérhető segédprogram.
4. Tesztelje a privát statikus módszert
Néhány esetben más módszerek az osztály privát statikus módszereit használják:
private static Integer stringToInteger (String num) {return Integer.parseInt (num); }
Az ilyen módszer teszteléséhez meg kellene gúnyolnunk a privát statikus módszert. Használhatjuk a Deencapsulation.invoke () hasznossági módszer JMockit:
@Test public void givenAppManager_whenPrivateStaticMethod_thenValidateExpectedResponse () {int response = Deencapsulation.invoke (AppManager.class, "stringToInteger", "110"); assertEquals (110, válasz); }
Ahogy a neve is sugallja, célja az, hogy kapszulázatlan egy tárgy állapota. Ily módon a JMockit leegyszerűsíti azokat a tesztelési módszereket, amelyeket más módon nem lehetett tesztelni.
5. Következtetés
Ebben a cikkben azt láttuk, hogy a statikus módszereket hogyan lehet csúfolni JMockit. A JMockit néhány speciális funkciójának részletesebb áttekintéséhez tekintse meg a JMockit speciális használat cikkünket.
Szokás szerint az oktatóanyag teljes forráskódja elérhető a GitHubon.