Uvod u Jukito
1. Pregled
Jukito je kombinirana snaga JUnit-a, Guice-a i Mockita-koristi se za pojednostavljivanje testiranja višestrukih implementacija istog sučelja.
U ovom ćemo članku vidjeti kako su autori uspjeli kombinirati te tri knjižnice kako bi nam pomogli smanjiti puno standardnih kodova, čineći naše testove fleksibilnima i jednostavnima.
2. Postavljanje
Prvo ćemo našem projektu dodati sljedeću ovisnost:
org.jukito jukito 1.5 test
Najnoviju verziju možemo pronaći na Maven Central.
3. Različite implementacije sučelja
Da bismo započeli razumijevanje moći Jukita, definirat ćemo jednostavan Kalkulator sučelje s Dodati metoda:
kalkulator javnog sučelja {javni dvostruki dodatak (dvostruki a, dvostruki b); }
A implementirat ćemo sljedeće sučelje:
javna klasa SimpleCalculator implementira Kalkulator {@Preuzmi javni dvostruki dodatak (dvostruki a, dvostruki b) {return a + b; }}
Također nam treba još jedna implementacija:
public class ScientificCalculator proširuje SimpleCalculator {}
Sada, iskoristimo Jukito za testiranje obje naše implementacije:
@RunWith (JukitoRunner.class) javna klasa CalculatorTest {javni statički modul klase proširuje JukitoModule {@Override protected void configureTest () {bindMany (Calculator.class, SimpleCalculator.class, ScientificCalculator.class); }} @Test javna praznina givenTwoNumbers_WhenAdd_ThenSumBoth (@All Calculator calc) {double result = calc.add (1, 1); assertEquals (2, rezultat, .1); }}
U ovom primjeru možemo vidjeti a JukitoModule, koji se povezuju u svim navedenim izvedbama.
The @Svi napomena uzima sve veze istog sučelja koje je napravio JukitoModule i pokreće test sa svim različitim implementacijama ubrizganim tijekom izvođenja.
Ako pokrenemo testove, možemo vidjeti da se doista izvode dva testa umjesto jednog:
Izvršeni testovi: 2, neuspjesi: 0, pogreške: 0, preskočeni: 0
4. Dekartov proizvod
Dodajmo sada jednostavnu ugniježđenu klasu za različite kombinacije testova za naš Dodati metoda:
javna statička klasa AdditionTest {int a; int b; int očekivano; // standardni konstruktori / getteri}
To će proširiti broj testova koje možemo pokrenuti, ali prvo moramo dodati dodatne vezove u naš configureTest metoda:
bindManyInstance (AdditionTest.class, novi AdditionTest (1, 1, 2), novi AdditionTest (10, 10, 20), novi AdditionTest (18, 24, 42));
I na kraju u svoj paket dodajemo još jedan test:
@Test javna praznina givenTwoNumbers_WhenAdd_ThenSumBoth (@All Calculator calc, @All AdditionTest addTest) {double result = calc.add (addTest.a, addTest.b); assertEquals (addTest.expected, result, .1); }
Sada the @Svi anotacija će proizvesti kartezijanski proizvod različitih kombinacija između različitih implementacija Kalkulator sučelje i AdditionTest instance.
Možemo pogledati povećani broj testova koje sada proizvodi:
Izvršeni testovi: 8, neuspjesi: 0, pogreške: 0, preskočeni: 0
Moramo imati na umu da se broj pokusaja drastično povećava za kartezijanske proizvode.
Vrijeme izvršavanja svih testova postat će linearno s brojem izvršavanja. i: e .: ispitna metoda s tri parametra s @Svi napomena i četiri uvezivanja po parametru izvršit će se 4 x 4 x 4 = 64 puta.
Posjedovanje pet veza za istu metodu ispitivanja dovest će do 5 x 5 x 5 = 125 izvršenja.
5. Grupiranje po imenima
Posljednja značajka o kojoj ćemo razgovarati je grupiranje po imenu:
bindManyNamedInstance (Integer.class, "even", 2, 4, 6); bindManyNamedInstance (Integer.class, "ak", 1, 3, 5);
Ovdje smo dodali nekoliko imenovanih primjera klase cijelih brojeva configureTest metodom, kako bi se prikazalo što se može učiniti s tim skupinama.
Sad ćemo dodati još nekoliko testova:
@Test javna praznina givenEvenNumbers_whenPrint_thenOutput (@All ("even") Integer i) {System.out.println ("even" + i); } @Test javna praznina givenOddNumbers_whenPrint_thenOutput (@All ("odd") Integer i) {System.out.println ("odd" + i); }
Gornji primjer ispisat će šest nizova "even 2", "even 4", "even 6", "nepar 1", "nepar 3", "nepar 5".
Imajte na umu da njihov redoslijed nije zajamčen tijekom izvođenja.
6. Zaključak
U ovom smo brzom uputstvu pogledali kako Jukito dopušta upotrebu cijelog paketa testova, pružajući taman dovoljno kombinacija test slučajeva.
Cjelovit primjer možete pronaći na GitHubu.