Uvod u testiranje s Arquillianom

1. Pregled

Arquillian je okvir za testiranje agnostičkih kontejnera za Jakarta EE. Korištenje Arquilliana smanjuje teret upravljanja spremnicima, implementacijama, inicijalizacijom okvira i tako dalje.

Možemo se usredotočiti na pisanje stvarnih testova, a ne na pokretanje testnog okruženja.

2. Temeljni koncepti

2.1. Arhiva raspoređivanja

Postoji jednostavan način za testiranje naše aplikacije kada se pokreće unutar spremnika.

Prvo, ShrinkWrap klasa pruža API za stvaranje raspoloživog * .jar,*.rat, i *.uho datoteke.

Zatim, Arquillian nam omogućuje da konfiguriramo testno raspoređivanje pomoću @ Razmještanje napomena - na metodi koja vraća a ShrinkWrap objekt.

2.2. Spremnici

Arquillian razlikuje tri različite vrste spremnika:

  • Daljinsko - testirano pomoću udaljenog protokola poput JMX-a
  • Upravljani - udaljeni spremnici, ali njihovim životnim ciklusom upravlja Arquillian
  • Ugrađeni - lokalni spremnici u kojima se ispitivanja provode pomoću lokalnih protokola

Također, možemo klasificirati spremnike prema njihovim mogućnostima:

  • Jakarta EE aplikacije postavljene na aplikacijski poslužitelj poput Glassfish ili JBoss
  • Spremnici za servlet postavljeni na Tomcat ili Jetty
  • Samostalni spremnici
  • OSGI spremnici

Ispituje putanju klase izvođenja i automatski odabire dostupni spremnik.

2.3. Obogaćivanje testa

Arquillian obogaćuje testove pružajući npr. ubrizgavanje ovisnosti kako bismo mogli lako pisati svoje testove.

Možemo ubrizgati ovisnosti koristeći @Ubrizgati, ubrizgajte resurse s @Resurs, EJB grah sesije pomoću @EJB, itd.

2.4. Višestruki test trkači

Pomoću napomene možemo stvoriti višestruku implementaciju:

@ Razmještanje (name = "myname" order = 1)

Gdje je ime ime datoteke za postavljanje, a parametar naloga je redoslijed izvršenja implementacije, tako da sada možemo istodobno pokretati testove na više implementacija pomoću bilješke:

@Test @OperateOnDeployment ("moje ime")

Prethodni test se izvodi na moje ime spremnik za postavljanje koristeći redoslijed definiran u @ Razmještanje bilješka.

2.5. Arquillian Extensions

Arquillian nudi višestruka proširenja u slučaju da naše potrebe za testiranjem nisu pokrivene osnovnim izvođenjem. Imamo trajnost, transakcije, klijent / poslužitelj, REST proširenja itd.

Ta proširenja možemo omogućiti dodavanjem odgovarajućih ovisnosti u konfiguracijske datoteke Maven ili Gradle.

Često korišteni nastavci su Drone, Graphene i Selenium.

3. Ovisnosti i postavljanje Mavena

Dodajmo sljedeću ovisnost na našu pom.xml datoteka:

 org.jboss.arquillian arquillian-bom 1.1.13.Finalni uvoz 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 

Najnoviju verziju ovisnosti možete pronaći ovdje: arquillian-bom, org.glassfish.main.extras, org.jboss.arquillian.container.

4. Jednostavan test

4.1. Stvorite komponentu

Počnimo s jednostavnom komponentom. Ovdje ne uključujemo nikakvu naprednu logiku da bismo se mogli usredotočiti na testove:

javna klasa Komponenta {public void sendMessage (PrintStream to, String msg) {to.println (poruka (msg)); } javna niz poruka (niz poruka) {return "Poruka," + poruka; }}

Koristeći Arquillian, želimo testirati da se ova klasa ponaša ispravno kada se poziva kao CDI grah.

4.2. Napišite naš prvi test za Arquillian

Prvo, moramo navesti da se naša klasa ispitivanja treba izvoditi pomoću pokretača specifičnog za framework:

@RunWith (Arquillian.class) 

Ako ćemo testove izvoditi unutar spremnika, trebamo koristiti @ Razmještanje bilješka.

Arquillian ne koristi cijelu put predavanja za izoliranje testne arhive. Umjesto toga koristi ShrinkWrap klase, to je Java API za stvaranje arhiva. Kada kreiramo arhivu za testiranje, mi određujemo koje ćemo datoteke uključiti u put predavanja da bismo koristili test. Tijekom raspoređivanja, ShrinkWrap izolira samo klase potrebne za test.

Koristiti addclass () metodom možemo odrediti sve potrebne klase, a također dodati prazan resurs manifesta.

The JavaArchive.class stvara mockup web arhivu pod nazivom test.war, ova se datoteka raspoređuje u spremnik, a zatim je koristi Arquillian za provođenje testova:

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

Zatim u test ubrizgamo našu komponentu:

@ Ubrizgavanje komponente privatne komponente;

Na kraju izvodimo test:

assertEquals ("Poruka, PORUKA", component.message (("PORUKA"))); component.sendMessage (System.out, "MESSAGE");

5. Testiranje Enterprise Java graha

5.1. Poduzeće Java Bean

S Arquillianom možemo testirati ubrizgavanje ovisnosti Enterprise Java Bean-a, da bismo to napravili, stvorili smo klasu koja ima metodu za pretvaranje bilo koje riječi u mala slova:

javna klasa ConvertToLowerCase {javni niz pretvoriti (String riječ) {return word.toLowerCase (); }}

Koristeći ovu klasu, kreiramo klasu bez stanja za pozivanje metode kreirane prije:

@Stateless javna klasa CapsConvertor {public ConvertToLowerCase getLowerCase () {return new ConvertToLowerCase (); }}

The CapsConvertor klasa se ubrizgava u uslužni grah:

@Stateless javna klasa CapsService {@Inject private CapsConvertor capsConvertor; javni String getConvertedCaps (završna niz riječi) {return capsConvertor.getLowerCase (). convert (word); }}

5.2. Testirajte Enterprise Java Bean

Sada možemo koristiti Arquillian za testiranje našeg poduzeća Java Bean, ubrizgavanjem CapsService:

@ Ubrizgajte privatni CapsService capsService; @Test javna praznina givenWord_WhenUppercase_ThenLowercase () {assertTrue ("kapitalizacija" .equals (capsService.getConvertedCaps ("CAPITALIZE"))); assertEquals ("kapitalizacija", capsService.getConvertedCaps ("KAPITALIZACIJA")); }

Koristeći ShrinkWrap, osiguravamo da su sve klase pravilno povezane:

@Deployment javna statička JavaArchive createDeployment () {return ShrinkWrap.create (JavaArchive.class) .addClasses (CapsService.class, CapsConvertor.class, ConvertToLowerCase.class) .addAsManifestResource (EmptyAsset.STANCE "ESTANS" }

6. Testiranje JPA

6.1. Upornost

Arquillian također možemo koristiti za testiranje ustrajnosti. Prvo ćemo stvoriti svoj entitet:

@ Entity javni razred automobila {@Id @GeneratedValue private Long id; @NotNull privatni naziv niza; // geteri i postavljači}

Imamo tablicu s imenima automobila.

Tada ćemo stvoriti naš EJB za obavljanje osnovnih operacija nad našim podacima:

@ Državna državna klasa CarEJB {@PersistenceContext (unitName = "defaultPersistenceUnit") private EntityManager em; javni Car saveCar (Car car) {em.persist (car); povratak automobila; } javni popis findAllCars () {Query query = em.createQuery ("SELECT b FROM Car b ORDER BY b.name ASC"); Unosi na popisu = query.getResultList (); vratiti unose == null? novi ArrayList (): unosi; javna praznina deleteCar (Automobil) {car = em.merge (auto); em.remove (auto); }}

S saveCar možemo spremiti imena automobila u bazu podataka, možemo pohraniti sve automobile findAllCars, a također možemo izbrisati automobil iz baze podataka pomoću deleteCar.

6.2. Testiraj upornost s Arquillianom

Sada možemo izvesti neke osnovne testove koristeći Arquillian.

Prvo, svoje satove dodajemo svojim ShrinkWrap:

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

Zatim kreiramo test:

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

U ovom testu prvo stvaramo četiri primjerka automobila i provjeravamo je li broj redaka u bazi podataka isti kao i mi.

8. Zaključak

U ovom uputstvu mi:

  • predstavio temeljne koncepte Arquilliana
  • ubrizgala komponentu u Arquillianov test
  • testirao EJB
  • provjerena upornost
  • izveo Arquillian test koristeći Maven

Kôd možete pronaći iz članka na Githubu.


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