Bevezetés az Arquillian teszteléséhez
1. Áttekintés
Az Arquillian egy konténer-agnosztikus integrációs tesztelési keretrendszer a Jakarta EE számára. Az Arquillian használata minimalizálja a konténerek, a telepítések, a keretrendszer inicializálásának stb. Kezelésének terheit.
Koncentrálhatunk a tényleges tesztek megírására, és nem a tesztkörnyezet bootstrapelésére.
2. Alapfogalmak
2.1. Telepítési archívumok
Van egy egyszerű módja az alkalmazásunk tesztelésének, amikor egy konténerben fut.
Először, Zsugorfólia osztály API-t biztosít a telepíthető létrehozásához *.befőttes üveg,*.háború, és *.fül fájlokat.
Ezután az Arquillian lehetővé teszi számunkra a teszt telepítés konfigurálását a @Bevezetés annotáció - olyan metóduson, amely a Zsugorfólia tárgy.
2.2. Konténerek
Az Arquillian három különböző típusú konténert különböztet meg:
- Távoli - olyan távoli protokoll használatával tesztelve, mint a JMX
- Kezelt - távoli konténerek, de életciklusukat Arquillian kezeli
- Beágyazott - helyi tárolók, ahol a teszteket helyi protokollok segítségével hajtják végre
A konténereket képességeik szerint is osztályozhatjuk:
- A Jakarta EE alkalmazásokat olyan alkalmazáskiszolgálón telepítették, mint a Glassfish vagy a JBoss
- Servlet-konténerek a Tomcaton vagy a mólón
- Önálló konténerek
- OSGI konténerek
Megvizsgálja a futási osztályt, és automatikusan kiválasztja a rendelkezésre álló tárolót.
2.3. Tesztdúsítás
Az Arquillian gazdagítja a teszteket azzal, hogy pl. a függőségi injekció, hogy könnyen megírhassuk tesztjeinket.
Használhatunk függőségeket injekcióval @ Injekció, erőforrásokat juttat a @Forrás, EJB session bab felhasználásával @EJB, stb.
2.4. Több teszt futó
A kommentár segítségével több telepítést is létrehozhatunk:
@ Deployment (név = "nevem" megrendelés = 1)
Ahol a név a telepítési fájl neve, a rendelési paraméter pedig a központi telepítés végrehajtási sorrendje, így most egyszerre több futtatáson is futtathatunk teszteket a kommentár segítségével:
@Test @OperateOnDeployment ("nevem")
Az előtti tesztet a nevem telepítési konténer a @Bevezetés annotáció.
2.5. Arquillian kiterjesztések
Az Arquillian többféle kiterjesztést kínál arra az esetre, ha tesztelési igényeinket nem fedné le az alap futásideje. Rendelkezünk kitartással, tranzakciókkal, kliens / szerver, REST kiterjesztésekkel stb.
Engedélyezhetjük ezeket a kiterjesztéseket, ha megfelelő függőségeket adunk hozzá a Maven vagy a Gradle konfigurációs fájlokhoz.
A leggyakrabban használt kiterjesztések a Drone, a Graphene és a Selenium.
3. Maven-függőségek és beállítás
Adjuk hozzá a következő függőséget a mi pom.xml fájl:
org.jboss.arquillian arquillian-bom 1.1.13. Végső import pom org.glassfish.main.extras glassfish-embedded-all 4.1.2 test org.jboss.arquillian.container arquillian-glassfish-embedded-3.1 1.0.0.Final teszt
A függőségek legújabb verziója itt található: arquillian-bom, org.glassfish.main.extras, org.jboss.arquillian.container.
4. Egyszerű teszt
4.1. Hozzon létre egy komponenst
Kezdjük egy egyszerű komponenssel. A tesztekre való összpontosításhoz itt nem tartalmazunk fejlett logikát:
public class Component {public void sendMessage (PrintStream to, String msg) {to.println (message (msg)); } public String üzenet (String msg) {return "Message", + msg; }}
Az Arquillian használatával tesztelni akarjuk, hogy ez az osztály helyesen viselkedik-e, amikor CDI-babként hívják meg.
4.2. Írja meg az első Arquillian tesztünket
Először meg kell határoznunk, hogy teszt osztályunkat a keretrendszer-specifikus futóval kell futtatni:
@RunWith (Arquillian.class)
Ha tesztjeinket egy konténeren belül fogjuk lefuttatni, akkor a @Bevezetés annotáció.
Arquillian nem használja a teljes osztálytípust a tesztarchívum elkülönítésére. Ehelyett a Zsugorfólia osztály, ez egy Java API az archívumok létrehozásához. Amikor létrehozunk egy archívumot a teszteléshez, megadjuk, hogy mely fájlokat vegye fel az osztályútvonalba a teszt használatához. A telepítés során Zsugorfólia csak a teszthez szükséges osztályokat izolálja.
Használni a addclass () módszerrel megadhatjuk az összes szükséges osztályt, és hozzáadhatunk egy üres manifest erőforrást is.
A JavaArchive.class nevű makett webarchívumot hoz létre test.war, ezt a fájlt telepítik a tárolóba, majd az Arquillian tesztek végrehajtására használja:
@Deployment nyilvános statikus JavaArchive createDeployment () {return ShrinkWrap.create (JavaArchive.class) .addClass (Component.class) .addAsManifestResource (EmptyAsset.INSTANCE, "beans.xml"); }
Ezután beadjuk a komponensünket a tesztbe:
@ Inject private Component komponens;
Végül elvégezzük a tesztünket:
assertEquals ("Üzenet, ÜZENET", component.message (("ÜZENET"))); component.sendMessage (System.out, "MESSAGE");
5. Vállalati Java bab tesztelése
5.1. Enterprise Java Bean
Az Arquillian segítségével tesztelhetjük az Enterprise Java Bean függőség-injektálását, ehhez létrehozunk egy osztályt, amelynek módszere van bármely szó kisbetűvé konvertálására:
public class ConvertToLowerCase {public String convert (String word) {return word.toLowerCase (); }}
Ennek az osztálynak a segítségével létrehozunk egy hontalan osztályt a korábban létrehozott módszer meghívására:
@Stateless public class CapsConvertor {public ConvertToLowerCase getLowerCase () {return new ConvertToLowerCase (); }}
A CapsConverter osztály kapja a szolgálati babot:
@ Állapot nélküli nyilvános osztály CapsService {@Inject privát CapsConvertor capsConvertor; public String getConvertedCaps (utolsó karakterlánc szó) {return capsConvertor.getLowerCase (). convert (szó); }}
5.2. Tesztelje az Enterprise Java Bean szoftvert
Most az Arquillian segítségével tesztelhetjük Java Bean vállalkozásunkat, és beírhatjuk a CapsService:
@ Injektáljon privát CapsService capsService; @Test public void givenWord_WhenUppercase_ThenLowercase () {assertTrue ("nagybetűs" .equals (capsService.getConvertedCaps ("CAPITALIZE"))); assertEquals ("nagybetűs", capsService.getConvertedCaps ("CAPITALIZE"); }
Használata Zsugorfólia, biztosítjuk, hogy az összes osztályt megfelelően csatlakoztassák:
@Deployment nyilvános statikus JavaArchive createDeployment () {return ShrinkWrap.create (JavaArchive.class) .addClasses (CapsService.class, CapsConvertor.class, ConvertToLowerCase.class) .addAsManifestResource (EmptyAs; }
6. A JPA tesztelése
6.1. Kitartás
Arquillian-t is használhatunk a kitartás tesztelésére. Először létrehozni fogjuk entitásunkat:
@Entity public class Car {@Id @GeneratedValue private Long id; @NotNull privát karakterlánc neve; // szerelők és beállítók}
Van egy táblázatunk, amely az autók nevét tartalmazza.
Ezután létrehozzuk az EJB-t, hogy elvégezzük az alapvető műveleteket az adatainkon:
@Statatlan nyilvános osztály CarEJB {@PersistenceContext (unitName = "defaultPersistenceUnit") private EntityManager em; public Car saveCar (Autó autó) {em.ellenőr (autó); visszatérő autó; } public list findAllCars () {Query query = em.createQuery ("SELECT b FROM Car b ORDER BY b.name ASC"); Lista bejegyzések = query.getResultList (); visszatérő bejegyzések == null? új ArrayList (): bejegyzések; public void deleteCar (Autó autó) {autó = em.merge (autó); em.eltávolítani (autó); }}
Val vel saveCar az autóneveket elmenthetjük az adatbázisba, minden autót tárolhatunk findAllCars, és azt is törölhetünk egy autót az adatbázisból a deleteCar.
6.2. Teszteld a perzisztenciát az Arquillian-nal
Most néhány alapvető tesztet elvégezhetünk az Arquillian segítségével.
Először hozzáadjuk az osztályainkat a tanfolyamainkhoz Zsugorfólia:
.addClasses (Car.class, CarEJB.class) .addAsResource ("META-INF / persistence.xml")
Ezután elkészítjük a tesztünket:
@Test public void testCars () {assertTrue (carEJB.findAllCars (). IsEmpty ()); Autó c1 = új autó (); c1.setName ("Impala"); Autó c2 = új autó (); c2.setName ("Lincoln"); carEJB.saveCar (c1); carEJB.saveCar (c2); assertEquals (2, carEJB.findAllCars (). méret ()); carEJB.deleteCar (c1); assertEquals (1, carEJB.findAllCars (). size ()); }
Ebben a tesztben először négy autó példányt hozunk létre, és ellenőrizzük, hogy az adatbázisban lévő sorok száma megegyezik-e az általunk létrehozott sorokkal.
8. Következtetés
Ebben az oktatóanyagban:
- bevezette az Arquillian-alapfogalmakat
- egy komponenst injektált az Arquillian-tesztbe
- tesztelt egy EJB-t
- tesztelte a kitartást
- elvégezte az Arquillian-tesztet Maven segítségével
A kódot megtalálhatja a cikkben a Githubon.