Esetenként nehéz elkülöníteni a tesztelendő kódot más osztályoktól (gondoljunk csak a session beanekben jelen lévő erőforrásokra: EntityManager, SessionContext stb.) A jMock egy osztálykönyvtár, amely ún. mock objektumok (álobjektumok) segítségével teszi egyszerűen tesztelhetővé az ilyen kódokat.
A mock objektumok lényegében más, meglévő osztályokat emulálnak úgy, hogy szabályozható a meghívható és a nem meghívható metódusok köre, meghatározhatóak a metódusok visszatérési értékei, feltételek szabhatóak a metódusok bemeneti paramétereire, vagy akár kivétel is dobható. Egy EntityManager példányt használó osztály (végletekig leegyszerűsített) tesztelése a 27. ábrán látható.
Mockery context = new Mockery(); SiteCheckServiceLocal siteCheck = new SiteCheckServiceBean(); // EntityManager mock objektum létrehozása final EntityManager em = context.mock(EntityManager.class); // mock EntityManager beszúrása reflection-nel Field emField = SiteCheckServiceBean.class.getDeclaredField("em"); emField.setAccessible(true); emField.set(siteCheck, em); // elvárások, engedélyezett metódusok és visszatérési // értékeik meghatározása final URL url1 = new URL(...); context.checking(new Expectations() {{ one (em).find(URL.class, 123L); will(returnValue(url1)); }}); // eredeti kód meghívása siteCheck.checkUrl(123L);
27. ábra: Egy EntityManager-t használó osztály jMock-al történő tesztelése
A context.mock() hívás létrehozza a mock objektumot, amit reflection-nel beillesztünk a tesztelendő session bean példányba (SiteCheckServiceBean, illetve siteCheck). Ezután a context.checking() metódusnak megadjuk az injektált ál-EntityManageren meghívható metódusokat és az ezekhez rendelt visszatérési értékeket. Jelenleg a find metódus hívható pontosan egyszer az ábrán látható két paraméterrel. A híváshoz meghatározott visszatérési érték az url1 objektumra mutató referencia. Az EntityManager példányra vonatkozó más hívások esetén a teszt sikertelen lesz.
Legutóbbi hozzászólások
8 év 47 hét
9 év 36 hét
9 év 40 hét
10 év 6 hét
11 év 8 hét
11 év 13 hét
11 év 13 hét
11 év 14 hét
11 év 24 hét
11 év 47 hét