A tesztek rendje a JUnit-ben

1. Áttekintés

Alapértelmezés szerint, A JUnit determinisztikus, de kiszámíthatatlan sorrendben futtatja a teszteket (MethodSorters.DEFAULT).

A legtöbb esetben ez a viselkedés teljesen rendben van és elfogadható; de vannak esetek, amikor egy adott megrendelést kell végrehajtanunk.

2. Tesztelési sorrend az 5. JUnit-ben

Az 5. JUnitben tudjuk használni @TestMethodOrder hogy ellenőrizzék a tesztek végrehajtási sorrendjét.

Használhatjuk a sajátunkat MethodOrderer, amint később látni fogjuk, vagy kiválaszthatjuk a három beépített megrendelő egyikét:

  1. @Rendelés Megjegyzés
  2. Alfanumerikus Rendelés
  3. Véletlenszerű sorrend

2.1. Használni a @Rendelés Megjegyzés

Használhatjuk a @Rendelés jelölés a tesztek végrehajtására egy adott sorrendben.

A következő példában a módszerek ebben a sorrendben fognak futni - firstTest (), azután secondTest (), és végül, thirdTest ():

@TestMethodOrder (OrderAnnotation.class) public class OrderAnnotationUnitTest {private static StringBuilder output = new 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 nyilvános statikus void assertOutput () {assertEquals (output.toString (), "abc"); }}

2.2. Használata Alfanumerikus Rendelés

A nevük alapján alfanumerikus sorrendben is futtathatunk teszteket:

@TestMethodOrder (Alphanumeric.class) public class AlphanumericOrderUnitTest {private static StringBuilder output = new StringBuilder (""); @Test public void myATest () {output.append ("A"); } @Test public void myBTest () {output.append ("B"); } @Test public void myaTest () {output.append ("a"); } @AfterAll public static void assertOutput () {assertEquals (output.toString (), "ABa"); }}

Vegye figyelembe, hogy az alfanumerikus sorrendben a kis- és nagybetűk különböznek egymástól, ezért a nagybetűs karakterek előbb, mint a kisbetűk.

A tesztek a következő sorrendben fognak futni: myATest (), myBTest () és végül myaTest ().

2.3. Egyéni megrendelés használata

Végül, a saját implementációnkat használhatjuk a MethodOrderer felület.

Miénkben CustomOrder, a teszteket a nevük alapján sorrendben alfanumerikus sorrendben vesszük figyelembe:

public class CustomOrder implementálja a MethodOrderer {@Orride public void orderMethods (MethodOrdererContext context) {context.getMethodDescriptors (). sort ((MethodDescriptor m1, MethodDescriptor m2) -> m1.getMethod (). getName (). CompareToIgetoreCet (( .getName ())); }}

Akkor használjuk CustomOrder hogy ugyanazon teszteket futtassuk az előző példánkkal ebben a sorrendben - myATest (), myaTest (), és végül, myBTest ():

@TestMethodOrder (CustomOrder.class) nyilvános osztály CustomOrderUnitTest {// ... @AfterAllAll public static void assertOutput () {assertEquals (output.toString (), "AaB"); }}

3. Tesztelési sorrend a JUnit 4-ben

Ha továbbra is a JUnit 4-et használja, a tesztek rendelésére szolgáló API-k kissé eltérnek.

Vizsgáljuk meg ennek elérésének lehetőségeit a korábbi verziókban is.

3.1. Használata MethodSorters.DEFAULT

Ez az alapértelmezett stratégia összehasonlítja a vizsgálati módszereket hash-kódjaikkal. Hash ütközés esetén a lexikográfiai sorrendet kell használni:

@FixMethodOrder (MethodSorters.DEFAULT) nyilvános osztály DefaultOrderOfExecutionTest {privát statikus StringBuilder kimenet = új 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"); }}

Amikor a fenti osztályban elvégezzük a teszteket, látni fogjuk, hogy mindannyian sikeresek, beleértve assertOutput ().

3.2. Használata MethodSorters.JVM

Egy másik rendelési stratégia az MethodSorters.JVMez a stratégia a természetes JVM-rendeléseket használja - amelyek minden egyes futtatásnál eltérőek lehetnek:

@FixMethodOrder (MethodSorters.JVM) JVMOrderOfExecutionTest nyilvános osztály {// a fentiekkel megegyező}

Minden alkalommal, amikor ebben a osztályban elvégezzük a teszteket, más eredményt kapunk.

3.3. Használata MethodSorters.NAME_ASCENDING

Végül ez a stratégia használható a teszt lefuttatására lexikográfiai sorrendben:

@FixMethodOrder (MethodSorters.NAME_ASCENDING) public class NameAscendingOrderOfExecutionTest {// ugyanaz, mint fent @AfterClass public static void assertOutput () {assertEquals (output.toString (), "abc"); }}

Hasonlóképpen, amikor a teszteket ebben az osztályban hajtjuk végre, azt látjuk, hogy mindannyian sikeresek, beleértve assertOutput (), amely megerősíti az annotációval beállított végrehajtási sorrendet.

4. Következtetés

Ebben a gyors bemutatóban áttekintettük a JUnitben elérhető végrehajtási sorrend beállításának módjait.

És mint mindig, az ebben a cikkben használt példák megtalálhatók a GitHubon.


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