Úvod do testovania s Arquillianom

1. Prehľad

Arquillian je kontajnerovo-agnostický rámec na testovanie integrácie pre spoločnosť Jakarta EE. Používanie produktu Arquillian minimalizuje záťaž pri správe kontajnerov, nasadení, inicializácii rámca atď.

Môžeme sa sústrediť na písanie skutočných testov a nie na bootstrapovanie testovacieho prostredia.

2. Základné koncepty

2.1. Archívy nasadenia

Existuje jednoduchá cesta na testovanie našej aplikácie, keď je spustená vo vnútri kontajnera.

Po prvé, ShrinkWrap trieda poskytuje API na vytvorenie nasaditeľného * .jar,*.vojna, a * .ear súbory.

Potom nám Arquillian umožňuje nakonfigurovať testovacie nasadenie pomocou @ Nasadenie anotácia - o metóde, ktorá vracia a ShrinkWrap objekt.

2.2. Kontajnery

Arquillian rozlišuje tri rôzne typy nádob:

  • Diaľkové - testované pomocou vzdialeného protokolu, ako je JMX
  • Spravované - vzdialené kontajnery, ale ich životný cyklus spravuje Arquillian
  • Vložené - lokálne kontajnery, kde sa testy vykonávajú pomocou miestnych protokolov

Kontajnery môžeme tiež klasifikovať podľa ich schopností:

  • Aplikácie Jakarta EE nasadené na aplikačnom serveri ako Glassfish alebo JBoss
  • Servletové kontajnery nasadené na Tomcat alebo Jetty
  • Samostatné kontajnery
  • Kontajnery OSGI

Skúma behovú cestu behu a automaticky vyberie dostupný kontajner.

2.3. Skúška obohatenia

Arquillian obohacuje testy poskytnutím napr. vkladanie závislostí, aby sme mohli ľahko písať svoje testy.

Závislosti môžeme vložiť pomocou @Inject, vložiť zdroje pomocou @ Zdroj, Fazuľa EJB pomocou @EJB, atď.

2.4. Viacero testovacích bežcov

Pomocou anotácie môžeme vytvoriť viac nasadení:

@ Nasadenie (meno = "moje meno" objednávka = 1)

Kde name je názov súboru nasadenia a parameter order je poradie vykonania nasadenia, takže teraz môžeme pomocou anotácie spúšťať testy na viacnásobných nasadeniach:

@Test @OperateOnDeployment ("moje meno")

Pred testom sa vykoná na serveri moje meno kontajner nasadenia pomocou poradia definovaného v @ Nasadenie anotácia.

2.5. Arquillian Extensions

Arquillian ponúka viac rozšírení pre prípad, že by naše testovacie potreby neboli pokryté jadrom behu. Máme perzistenciu, transakcie, klient / server, rozšírenia REST atď.

Tieto rozšírenia môžeme povoliť pridaním vhodných závislostí do konfiguračných súborov Maven alebo Gradle.

Bežne používané rozšírenia sú Drone, Graphene a Selenium.

3. Závislosti a nastavenie Maven

Pridajme k našej nasledujúcej závislosti pom.xml spis:

 org.jboss.arquillian arquillian-bom 1.1.13.Final 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 test 

Najnovšiu verziu závislostí nájdete tu: arquillian-bom, org.glassfish.main.extras, org.jboss.arquillian.container.

4. Jednoduchý test

4.1. Vytvorte komponent

Začnime jednoduchou súčasťou. Nezahŕňame tu žiadnu pokročilú logiku, aby sme sa mohli sústrediť na testy:

public class Component {public void sendMessage (PrintStream to, String msg) {to.println (message (msg)); } public String message (String msg) {return "Správa," + msg; }}

Pomocou programu Arquillian chceme vyskúšať, či sa táto trieda správa správne, keď je vyvolaná ako fazuľa CDI.

4.2. Napíšte náš prvý Arquillianov test

Najprv musíme určiť, že naša testovacia trieda by mala byť spustená pomocou bežca bežného pre daný rámec:

@RunWith (Arquillian.class) 

Ak chceme vykonať testy v kontajneri, musíme použiť @ Nasadenie anotácia.

Arquillian nepoužíva na izoláciu testovacieho archívu celú triednu cestu. Namiesto toho používa ShrinkWrap triedy, čo je Java API na vytváranie archívov. Keď vytvoríme archív na testovanie, určíme, ktoré súbory sa majú zahrnúť do cesty triedy, aby sa test použil. Počas nasadenia ShrinkWrap izoluje iba triedy potrebné na vykonanie testu.

Pomocou addclass () metódu môžeme určiť všetky potrebné triedy a tiež pridať prázdny zdroj manifestu.

The JavaArchive.class vytvorí maketový webový archív s názvom test.war, tento súbor sa nasadí do kontajnera a potom ho použije Arquillian na vykonávanie testov:

@Deployment public static JavaArchive createDeployment () {return ShrinkWrap.create (JavaArchive.class) .addClass (Component.class) .addAsManifestResource (EmptyAsset.INSTANCE, "beans.xml"); }

Potom vložíme náš komponent do testu:

@Inject private Component component;

Nakoniec vykonáme náš test:

assertEquals ("Správa, MESSAGE", component.message (("MESSAGE"))); component.sendMessage (System.out, "MESSAGE");

5. Testovanie Enterprise Java Beans

5.1. Enterprise Java Bean

S Arquillianom môžeme testovať vkladanie závislostí Enterprise Java Bean, aby sme vytvorili triedu, ktorá má metódu na konverziu ľubovoľného slova na malé písmená:

public class ConvertToLowerCase {public String convert (String word) {return word.toLowerCase (); }}

Pomocou tejto triedy vytvoríme bezstavovú triedu pre volanie predtým vytvorenej metódy:

@ Verejná trieda bez štátnej príslušnosti CapsConvertor {public ConvertToLowerCase getLowerCase () {return new ConvertToLowerCase (); }}

The CapsConvertor trieda vstreknutá do servisnej fazule:

@ Verejná trieda bez štátnej príslušnosti CapsService {@Inject private CapsConvertor capsConvertor; public String getConvertedCaps (konečné reťazcové slovo) {return capsConvertor.getLowerCase (). convert (word); }}

5.2. Vyskúšajte Enterprise Java Bean

Teraz môžeme pomocou Arquillian otestovať náš podnikový Java Bean a vložiť CapsService:

@Inject private CapsService capsService; @Test public void givenWord_WhenUppercase_ThenLowercase () {assertTrue ("capitalize" .equals (capsService.getConvertedCaps ("CAPITALIZE"))); assertEquals ("capitalize", capsService.getConvertedCaps ("CAPITALIZE")); }

Použitím ShrinkWrap, zabezpečujeme správne zapojenie všetkých tried:

@Deployment public static JavaArchive createDeployment () {return ShrinkWrap.create (JavaArchive.class) .addClasses (CapsService.class, CapsConvertor.class, ConvertToLowerCase.class) .addAsManifestResource (EmptyAsset.INSTANCE, "binárny" }

6. Testovanie JPA

6.1. Vytrvalosť

Na otestovanie vytrvalosti môžeme použiť aj Arquillian. Najskôr vytvoríme našu entitu:

@Entity public class Car {@Id @GeneratedValue private Long id; @NotNull súkromné ​​meno reťazca; // zakladatelia a zakladatelia}

Máme tabuľku s názvami automobilov.

Potom vytvoríme náš EJB na vykonávanie základných operácií s našimi údajmi:

@ Bezstavová verejná trieda CarEJB {@PersistenceContext (unitName = "defaultPersistenceUnit") súkromný EntityManager em; public Car saveCar (Car car) {em.persist (car); spiatočné auto; } public List findAllCars () {Query query = em.createQuery ("SELECT b FROM Car b ORDER BY b.name ASC"); Zoznam položiek = query.getResultList (); vrátiť záznamy == null? new ArrayList (): entries; public void deleteCar (Car car) {car = em.merge (car); em. odstrániť (auto); }}

S saveCar môžeme uložiť mená automobilov do databázy, môžeme nechať všetky autá uložené s findAllCars, a tiež môžeme vymazať auto z databázy pomocou deleteCar.

6.2. Vyskúšajte vytrvalosť s Arquillianom

Teraz môžeme pomocou Arquillian vykonať niekoľko základných testov.

Najskôr pridáme naše triedy do našich ShrinkWrap:

.addClasses (Car.class, CarEJB.class) .addAsResource ("META-INF / persistence.xml")

Potom vytvoríme náš test:

@Test public void testCars () {assertTrue (carEJB.findAllCars (). IsEmpty ()); Auto c1 = nové auto (); c1.setName ("Impala"); Auto c2 = nové auto (); c2.setName ("Lincoln"); carEJB.saveCar (cl); carEJB.saveCar (c2); assertEquals (2, carEJB.findAllCars (). size ()); carEJB.deleteCar (c1); assertEquals (1, carEJB.findAllCars (). size ()); }

V tomto teste najskôr vytvoríme štyri inštancie automobilov a skontrolujeme, či je počet riadkov v databáze rovnaký, aký sme vytvorili.

8. Záver

V tomto výučbe:

  • predstavil základné koncepty Arquilliana
  • vstrekla komponent do Arquillianovho testu
  • otestoval EJB
  • testovaná vytrvalosť
  • vykonal Arquillianov test pomocou Mavena

Kód z článku nájdete na stránkach Github.


$config[zx-auto] not found$config[zx-overlay] not found