Poradie testov v JUnit

1. Prehľad

Predvolene, JUnit spúšťa testy v deterministickom, ale nepredvídateľnom poradí (MethodSorters.DEFAULT).

Vo väčšine prípadov je toto správanie úplne v poriadku a prijateľné; ale existujú prípady, kedy musíme presadiť konkrétne nariadenie.

2. Testovacia objednávka v JUnit 5

V JUnit 5, môžeme použiť @TestMethodOrder na kontrolu poradia vykonávania testov.

Môžeme použiť svoje vlastné MethodOrderer, ako uvidíme neskôr, alebo môžeme zvoliť jedného z troch zabudovaných objednávačov:

  1. @Objednať Anotácia
  2. Alfanumerické objednať
  3. Náhodné poradie

2.1. Pomocou @Objednať Anotácia

Môžeme použiť @Objednať anotácia na vynútenie vykonania testov v konkrétnom poradí.

V nasledujúcom príklade budú metódy bežať v tomto poradí - firstTest ()potom secondTest (), a nakoniec, tretí test ():

@TestMethodOrder (OrderAnnotation.class) verejná trieda OrderAnnotationUnitTest {súkromný statický výstup StringBuilder = nový StringBuilder (""); @Test @Order (1) public void firstTest () {output.append ("a"); } @Test @Order (2) public void secondTest () {output.append ("b"); } @Test @Order (3) public void thirdTest () {output.append ("c"); } @AfterAll verejné static void assertOutput () {assertEquals (output.toString (), "abc"); }}

2.2. Použitím Alfanumerické objednať

Môžeme tiež spustiť testy na základe ich mien v alfanumerickom poradí:

@TestMethodOrder (Alphanumeric.class) verejná trieda AlphanumericOrderUnitTest {súkromný statický výstup StringBuilder = nový StringBuilder (""); @Test public void myATest () {output.append ("A"); } @Test public void myBTest () {output.append ("B"); } @Test public void myaTest () {output.append ("a"); } @AfterAll verejné static void assertOutput () {assertEquals (output.toString (), "ABa"); }}

Upozorňujeme, že v alfanumerickom poradí sa rozlišujú veľké a malé písmená, takže najskôr sa použijú veľké a potom malé písmená.

Testy budú prebiehať v tomto poradí: myATest (), myBTest () a nakoniec myaTest ().

2.3. Pomocou vlastnej objednávky

Nakoniec môžeme použiť našu vlastnú objednávku vykonaním MethodOrderer rozhranie.

V našom CustomOrder, testy zoradíme na základe ich mien v alfanumerickom poradí bez rozlišovania malých a veľkých písmen:

verejná trieda CustomOrder implementuje MethodOrderer {@Override public void orderMethods (MethodOrdererContext context) {context.getMethodDescriptors (). sort ((MethodDescriptor m1, MethodDescriptor m2) -> m1.getMethod (). getName (). compareToIgnoreCase () .getName ())); }}

Potom použijeme CustomOrder spustiť rovnaké testy z nášho predchádzajúceho príkladu v tomto poradí - myATest (), myaTest (), a nakoniec, myBTest ():

@TestMethodOrder (CustomOrder.class) verejná trieda CustomOrderUnitTest {// ... @AfterAll verejné static void assertOutput () {assertEquals (output.toString (), "AaB"); }}

3. Testovacia objednávka v JUnit 4

Ak stále používate JUnit 4, rozhrania API na objednávanie testov sa mierne líšia.

Prejdime si možnosti, ako to dosiahnuť aj v predchádzajúcich verziách.

3.1. Použitím MethodSorters.DEFAULT

Táto predvolená stratégia porovnáva testovacie metódy s použitím ich hashcodes. V prípade hashovej kolízie sa použije lexikografické poradie:

@FixMethodOrder (MethodSorters.DEFAULT) verejná trieda DefaultOrderOfExecutionTest {súkromný statický výstup StringBuilder = nový StringBuilder (""); @Test public void secondTest () {output.append ("b"); } @Test public void thirdTest () {output.append ("c"); } @Test public void firstTest () {output.append ("a"); } @AfterClass public static void assertOutput () {assertEquals (output.toString (), "cab"); }}

Keď vykonáme testy v triede vyššie, uvidíme, že všetky prešli vrátane assertOutput ().

3.2. Použitím MethodSorters.JVM

Ďalšia stratégia objednávania je MethodSorters.JVMtáto stratégia využíva prirodzené usporiadanie JVM - ktoré sa môže pri každom behu líšiť:

@FixMethodOrder (MethodSorters.JVM) verejná trieda JVMOrderOfExecutionTest {// rovnaké ako vyššie}

Zakaždým, keď vykonáme testy v tejto triede, dostaneme iný výsledok.

3.3. Použitím MethodSorters.NAME_ASCENDING

Nakoniec je možné túto stratégiu použiť na spustenie testu v ich lexikografickom poradí:

@FixMethodOrder (MethodSorters.NAME_ASCENDING) verejná trieda NameAscendingOrderOfExecutionTest {// rovnaké ako vyššie @AfterClass public static void assertOutput () {assertEquals (output.toString (), "abc"); }}

Podobne, keď vykonáme testy v tejto triede, zistíme, že všetky vyhoveli vrátane assertOutput (), ktorý potvrdzuje exekučný príkaz, ktorý sme stanovili s anotáciou.

4. Záver

V tomto rýchlom výučbe sme si prešli spôsobmi nastavenia príkazu spustenia dostupného v JUnit.

A ako vždy, príklady použité v tomto článku nájdete na GitHub.


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