Dependency Injection si Testing in JUnit 5. Partea a treia

Ultimul articol din seria noastra despre dependency injection si testare in JUnit 5. De data aceasta ne uitam la teste parametrizabile.

May 11, 2020 86
Ultimul articol din seria noastra despre dependency injection si testare in JUnit 5. De data aceasta ne uitam la teste parametrizabile.

3. Teste parametrizabile

Testele parametrizabile permit rularea unui test de mai multe ori, cu argumente diferite. Beneficiul major este ca poti sa scrii un singur test si testarea este facuta pe o serie de argumente diferite. Testele tale vor fi mai sigure si vor verifica diferite date introduse. Metodele sunt adnotate folosind @ParameterizedTest. Trebuie sa declari cel putin o sursa, care ofera argumentele pentru fiecare invocare si apoi foloseste argumentele din metoda de testare.

@ValueSource este cea mai simpla dintre sursele posibile. Trebuie sa specifici o singura array de valori pentru a oferi un argument per test parametrizabil invocat. Folosirea acestei adnotari apare in listing 4. Scenariul acestui test consta in verificarea numarului de cuvinte dintr-o anumita propozitie, furnizate ca parametri.

The usage of the ValueSource annotation.JPG

In exemplul anterior aplicam urmatoarele actiuni:

  1. Marcam testul ca fiind unul parametrizabil folosind adnotarea corespondenta (1).
  2. Apoi specificam valorile care trebuie sa apara ca argumente ale metodei de testare (2). Metoda de testare este executata de doua ori, o data pentru fiecare dintre argumentele oferite de adnotarea @ValueSource.

@EnumSource ofera posibilittea de a folosi instante enum. Adnotarea ofera un parametru de nume optional care iti permite sa specifici care din instante trebuie folosita sau exclusa. In mod implicit, toate instantele unui enum sunt folosite.

Listing 5 arata folosirea adnotarii @EnumSource pentru a verifica numarul de cuvinte din anumite propozitii, furnizate ca instante.

The usage of the EnumSource annotation.JPG

In exemplul anterior avem un test parametrizabil. Functionalitatea este dupa cum urmeaza:

  1. Testul primeste ca parametri un CSV asa cum este specificat in adnotarea @CsvSource (1). Acest test este executat de trei ori, o data pentru fiecare linie din CSV.
  2. Linia din CVS este analizata si prima valoare este alocata parametrului expected, iar cea de-a doua valoare este alocata parametrului sentence.

@CsvFileSource iti permite sa folosesti fisierele CSV din classpath. Fiecare linie dintr-un fisier CSV activeaza o executie a testului parametrizabil.

Listing 6 arata folosirea adnotarii @CsvFileSource, si listing 7 afiseaza continutul fisierului word_counter.csv pe classpath. Scenariul testului este acela de a verifica numarul de cuvinte dintr-un set de propozitii, furnizate ca parametri—de data aceasta, in format CSV, avand un fisier CSV ca input.

The usage of the CsvFileSource annotation.JPG

In exemplul anterior am avut un test parametrizabil. Acesta primeste ca parametri ce avem specificat in fisierul indicat in adnotarea @CsvFileSource (1). Acest test este executat de trei ori, cate o data pentru fiecare linie din CSV. Fisierul CSV este analizat si prima valoare este alocata parametrului excepted, si cea de-a doua valoare este alocata parametrului sentence.

Concluzii

In cadrul acestei serii am abordat posibilitatile pe care le avem de a oferi parametri in unit tests JUnit 5 prin dependency injection. Am aratat cum putem face asta cu ajutorul mai multor parametri (TestInfoParameterResolver, TestReporterParameterResolver, RepetitionInfoParameterResolver). Am aratat de asemenea cum sa scriem teste repetate si parametrizabile (adnotari @RepeatedTest and @ParameterizedTest).

Vrei sa inveti mai multe despre aceasta tehnologie? Descopera cursurile noastre.

Catalin Tudose
Java and Web Technologies Expert

Daca iti place acest articol, distribuie-l si prietenilor tai!




Luxoft Warsaw - Warsaw Spire, plac Europejski 1, 00-844 Warszawa
Dimitrie Pompeiu nr 5-7 , building C, Et. 5, sect 2, Bucharest, 014459

Contact phone:

021 371 4858
Luxoft Poland Wroclaw - Silver Tower pl. Konstytucji 3-go Maja 3 50-048 Wroclaw
Aleja Generała Tadeusza Bora-Komorowskiego 25, Quattro Business Park Five, 31-476 Kraków, Poland

Contact phone:

+48 122110650
Success
Iti multumim.
Inregistrarea ta a fost trimisa.