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:
- @Rendelés Megjegyzés
- Alfanumerikus Rendelés
- 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.JVM – ez 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.