Dependency Injection si Testing in JUnit 5. Partea a treia
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.
11 May 2020
607
Other articles
Object-relational Mapping folosind JPA, Hibernate si Spring Data JPA. Persistence cu JPA
Cum sa interogam Kafka Streaming Data?
Procrastinarea. Care sunt avantajele ei?
Object-relational Mapping folosind JPA, Hibernate si Spring Data JPA
Procrastinarea
Cerinte. De ce avem nevoie de ele?
Dezvolta-ti abilitatile cu training-urile noastre
Programarea reactiva Java. Implementari
Testarea software. Intrebari tipice si raspunsuri. Continuare
Testarea software. Intrebari tipice si raspunsuri
Ultimul articol din seria noastra despre dependency injection si testare in JUnit 5. De data aceasta ne uitam la teste parametrizabile.
@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.

In exemplul anterior aplicam urmatoarele actiuni:
@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.

In exemplul anterior avem un test parametrizabil. Functionalitatea este dupa cum urmeaza:
@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.

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.
Java and Web Technologies Expert
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.
In exemplul anterior aplicam urmatoarele actiuni:
- Marcam testul ca fiind unul parametrizabil folosind adnotarea corespondenta (1).
- 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.
In exemplul anterior avem un test parametrizabil. Functionalitatea este dupa cum urmeaza:
- 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.
- 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.
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