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.