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.