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.