A magán módszerek gúnyolódása a PowerMock használatával

1. Áttekintés

Az egységtesztelés egyik kihívása a privát módszerek kigúnyolása.

Ebben az oktatóanyagban megtudhatjuk, hogyan érhetjük el ezt a PowerMock könyvtár használatával - amelyet a JUnit és a TestNG támogat.

A PowerMock integrálódik olyan gúnyolókeretekkel, mint az EasyMock és a Mockito, és további funkciókat kíván hozzáadni ezekhez - például a privát módszerek, a végső osztályok és a végső módszerek gúnyolódásához, stb.

Ezt bájtkód-manipulációra és egy teljesen különálló osztályterhelőre támaszkodva teszi.

2. Maven-függőségek

Először egészítsük ki a szükséges függőségeket a PowerMock Mockito és JUnit programmal való használatához pom.xml:

 org.powermock powermock-module-junit4 1.7.3 teszt org.powermock powermock-api-mockito2 1.7.3 teszt 

A legújabb verziók itt és itt ellenőrizhetők.

3. Példa

Kezdjük egy a példával LuckyNumberGenerator. Ennek az osztálynak egyetlen nyilvános módszere van a szerencsés szám előállítására:

public int getLuckyNumber (karakterlánc neve) {saveIntoDatabase (név); if (név == null) {return getDefaultLuckyNumber (); } return getComputedLuckyNumber (név.hossz ()); }

4. Variációk a privát módszerek gúnyolódásában

A módszer teljes mértékű teszteléséhez meg kell gúnyolnunk a privát módszereket.

4.1. Módszer érvek nélkül, de visszatérési értékkel

Egyszerű példaként nevezzük el egy privát módszer viselkedését argumentumok nélkül, és kényszerítsük vissza a kívánt érték visszaadására:

LuckyNumberGenerator gúny = kém (új LuckyNumberGenerator ()); mikor (ál, "getDefaultLuckyNumber"). thenReturn (300); 

Ebben az esetben a privát módszert gúnyoljuk getDefaultLuckyNumber és adja vissza 300-as értéket.

4.2. Módszer argumentummal és visszatérési értékkel

Ezután gúnyoljuk ki egy privát módszer viselkedését argumentummal, és kényszerítsük vissza a kívánt érték visszaadására:

LuckyNumberGenerator gúny = kém (új LuckyNumberGenerator ()); doReturn (1) .when (mock, "getComputedLuckyNumber", ArgumentMatchers.anyInt ()); 

Ebben az esetben kigúnyoljuk a privát módszert, és 1-gyel adjuk vissza.

Figyelje meg, hogy nem érdekel a bemeneti argumentum és a használat ArgumentMatchers.anyInt () mint helyettesítő karakter.

4.3. A módszer meghívásának ellenőrzése

Végső stratégiánk az, hogy a PowerMock segítségével ellenőrizzük a privát módszer meghívását:

LuckyNumberGenerator gúny = kém (új LuckyNumberGenerator ()); int eredmény = mock.getLuckyNumber ("Tyranosorous"); VerifyPrivate (mock) .invoke ("saveIntoDatabase", ArgumentMatchers.anyString ()); 

5. Óvatosan

Végül, bár a privát módszerek tesztelhetők a PowerMock használatával, különösen óvatosnak kell lennünk e technika használata során.

Tekintettel arra, hogy tesztelésünk célja egy osztály viselkedésének validálása, tartózkodni kell az osztály belső viselkedésének megváltoztatásától az egység tesztelése során.

A gúnyolódási technikákat az osztály külső függőségeire kell alkalmazni, és nem magára az osztályra.

Ha a privát módszerek gúnyolódása elengedhetetlen az osztályaink teszteléséhez, az általában rossz kialakítást jelez.

6. Következtetés

Ebben a rövid cikkben bemutattuk, hogyan lehetne a PowerMock-ot használni a Mockito képességének kibővítésére a tesztelt osztály privát módszereinek kigúnyolására és ellenőrzésére.

Az oktatóanyag forráskódja megtalálható a GitHub oldalon.