Migrarea de la JUnit 4 la JUnit 5: implementare, dependencies, adnotari. Partea a treia

Migrarea de la JUnit 4 la JUnit 5: implementare, dependencies, adnotari. Partea a treia

Ultimul articol din seria noastra despre migrarea de la JUnit 4 la JUnit 5 (implementare, dependencies, annotations). Astazi vom analiza migrarea efectiva.
24 Aug 2020 653

4. Migrare


Vom incepe demonstratia cu o clasa care simuleaza un sistem aflat in test (system under test - SUT). Aceasta clasa poate sa fie initializata, poate sa primeasca sarcini pe care sa le execute regulat dar nu poate sa primeasca sarcini aditionale pe care sa le execute, si se poate inchide.

Fig 4 Tested SUT class

Tested SUT Class.JPG

Figura 5 verifica functionalitatea SUT folosind functionalitatile oferite de JUnit 4 si figura 6 le verifica folosind JUnit 5. Aceste exemple arata si ciclul de viata al acestor metode. Dupa cum spuneam anterior, sistemul poate sa porneasca, sa primesca sarcini regulate si aditionale, si se poate inchide singur. Ciclul de viata si metodele de testare JUnit 4 si JUnit 5 asigura faptul ca sistemul se initializeaza si apoi se inchide inainte si dupa fiecare test. Metodele de testare verifica daca acesta poate sa primeasca sarcini in mod regulat sau sarcini aditionale.


Figura 5 JUnit4SUTTest class

JUnit4SUTTest class.JPG

Am inlocuit anterior JUnit 4 dependency cu JUnit Vintage dependency. Rezultatul rularii JUnit4SUTTest class este la fel in ambele cazuri (figura 7) si mySecondTest este marcat cu adnotarea @Ignore. Acum putem sa mergem mai departe cu migrarea efectiva a adnotarilor, claselor si metodelor.

JUnit4SUTTestSuite in IntelliJ.png


Fig. 7 Rularea JUnit4SUTTestSuite in IntelliJ folosind atat JUnit 4 dependency cat si JUnit Vintage dependency

Figura 8 JUnit5SUTTest class

JUnit5SUTTest class.JPG

Comparand cele 2 metode putem observa urmatoarele lucruri:

  • Metodele adnotate cu @BeforeClass (#1 in figura 5) si @BeforeAll (#1 in figura 6) sunt executate odata, inainte de toate testele. Aceste metode trebuie sa fie statice. In versiunea JUnit 4, metodele trebuie sa fie si publice. In versiunea JUnit 5, putem sa facem metodele nonstatice si sa adnotam intreaga test class cu @TestInstance(Life cycle.PER_CLASS).
  • Metodele adnotate cu @AfterClass (#2 in fig 5) si @AfterAll (#2′ in figura 6) sunt executate o data dupa toate testele. Aceste metode trebuie sa fie statice. In versiunea JUnit 4, metodele trebuie sa fie si publice. In versiunea JUnit 5, putem sa facem metodele nonstatice si sa adnotam intreaga test class cu @TestInstance(Life cycle.PER_CLASS).
  • Metodele adnotate cu @Before (#3 in figura 5) si @BeforeEach (#3′ in figura 6) sunt executate inainte de fiecare test. In versiunea JUnit 4 metodele trebuie sa fie publice.
  • Metodele adnotate cu @After (#4 in figura 5) and @AfterEach (#4′ in figura 6) sunt executate dupa fiecare test. In versiunea JUnit 4 metodele trebuie sa fie publice.
  • Metodele adnotate cu @Test (#5 in figura 5) si @Test (#5′ in figura 6) sunt executate independent. In versiunea JUnit 4 metodele trebuie sa fie publice. Cele doua adnotari apartin de diferite pachete: org.junit.Test si org.junit.jupiter.api.Test.
Pentru a sari peste executarea unei test method, JUnit 4 foloseste adnotarea @Ignore (#6 in figura 5), in timp ce in JUnit 5 folosim adnotarea @Disabled (#6′ in figura 6).

Nivelul de acces a fost relaxat pentru test methods, de la public la package-private. Aceste metode sunt accesate doar din cadrul pachetului de care apartine test class, asa ca nu trebuie sa fie facute publice.


Concluzii

In cadrul acestui articol am discutat despre pasii necesari pentru a migra de la JUnit 4 la JUnit 5: inlocuirea dependencies, inlocuirea adnotarilor, inlocuirea testing classes si metode. JUnit 4 este utilizat in continuare si va fi utilizat si in viitor, deoarece exista un volum mare de teste deja scrise. Dar este bine sa incepem sa migram usor codul nostru catre abordarea JUnit 5.

This article has demonstrated the steps needed by the migration from JUnit 4 to JUnit 5 and summarizing them into a guiding table: replace the dependencies, replace the annotations, replace the testing classes and methods. JUnit 4 is and will still be in use, because there is a large amount of already written tests. You may consider slowly migrating your code to the new JUnit 5 approach.

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

Catalin Tudose
Java and Web Technologies Expert

Share the knowledge

Mai ai intrebari?
Contacteaza-ne.
Thank you!
The form has been submitted successfully.