junit test execution order
Tento výukový program vysvětluje, jak nastavit spouštěcí příkaz pro testovací případy JUnit. Dozvíte se o anotacích a třídách k nastavení pořadí provádění testu JUnit v JUnit 4 vs JUnit 5:
Naučili jsme se, jak vytvořit testovací sadu, jak přidat kategorii nebo značku do testovacích případů a jak odfiltrovat testy (vyloučit nebo zahrnout testovací případy) na základě kategorie nebo značky v našem předchozím kurzu.
Kromě toho jsme se dozvěděli, že v JUnit 4 ano @Category, @IncludeCategory, a @ VyloučitKategorii pro filtrování testovacích případů, zatímco JUnit 5 má @IncludeTags a @ Vyloučit značky udělat totéž.
JUnit 5 má další možnosti filtrování pomocí anotací @IncludePackages, @ExcludePackages, a také poznámky k zahrnutí nebo vyloučení tříd pomocí vzorů názvů tříd.
=> Chcete-li zobrazit výukové programy školení JUnit, podívejte se sem .
Co se naučíte:
Příkaz k provedení testu JUnit
V tomto kurzu se naučíme, jak nastavit pořadí pro každý testovací případ tak, aby běžely v nastaveném pořadí. Naučíme se, jak objednávat testy v JUnit 4 i v JUnit 5.
Testovací metody ve výchozím nastavení nenásledují konkrétní pořadí.Testovací případy se nemusí nutně provádět v pořadí, v jakém byly napsány.
Existují různé způsoby nebo režimy pro nastavení pořadí provádění pro testovací případy. Také se hlouběji ponoříme do toho, jak se JUnit 4 liší v pořadí testovacích případů ve srovnání s JUnit 5.
JUnit 4: @FixedMethodOrder, Class MethodSorters
Počínaje JUnit 4.11 máme anotaci @FixMethodOrder a MethodSorters.class podpora zařízení pro stanovení objednávky na provedení testu.
Balík org.junit.runners. * je třeba importovat, aby zahrnoval třídu MethodSorters . Tato třída rozhoduje o tom, jak je nutné objednat testovací případy. MethodSorters mít tři výčet hodnoty.
Níže jsou uvedeny hodnoty výčtu třídy spolu s účelem, ke kterému každá z těchto hodnot slouží:
MethodSorters.DEFAULT | Tato výčtová hodnota seřadí provedení testu v určitém pořadí. Nikdy však nelze předvídat, v jakém pořadí může testovací případy spustit. |
To je důvod, proč máte kontrolu nad svým rozhodnutím, který testovací kufr by měl běžet jako první a který z nich by měl následovat další. | |
Všiml jsem si, že třída s více metodami tříděnými s DEFAULT enum při spuštění, objednávka zůstává stejná pokaždé během provádění testu. | |
Neexistuje však žádný způsob, jak bych mohl předvídat nebo zjistit způsob, jakým bylo pořadí nastaveno. | |
MethodSorters.JVM | Pořadí provádění testu s výčtem JVM je, jak název napovídá, určuje JVM. |
V tomto případě pokaždé, když spustíte třídu, testy nebudou provedeny ve stejném, ale v náhodném pořadí. | |
Jinými slovy, pořadí testů se mění během každého běhu. | |
MethodSorters.NAME_ASCENDING | Tento výčet seřadí testovací metody v lexikografickém pořadí podle názvu metody. Proto si můžete být jisti, že toto je nejpředvídatelnější způsob objednání provedení testu. |
Proto se můžete předem rozhodnout o pořadí testů na základě lexikografického pořadí názvu, který jste nastavili. |
Anotace @FixedMethodOrder přebírá vstupní parametr MethodSorters s jeho výčtovou hodnotou. Balíček potřebný pro anotaci je org.junit.FixedMethodOrder.
Podívejme se, jak je implementována prostřednictvím kódu.
Implementace kódu pro MethodSorters.DEFAULT
Vytvořme soubor třídy JUnit ‘ Junit4TestOrder.java ' kde budeme používat MethodSorters.DEFAULT
Kód pro Junit4TestOrder.java
@FixMethodOrder(MethodSorters.DEFAULT) public class JUnit4TestOrder { @Test public void Testcase_3() { System.out.println('Testcase_3 executes'); } @Test public void Testcase_1() { System.out.println('Testcase_1 executes'); } @Test public void Testcase_2() { System.out.println('Testcase_2 executes '); } }
Třídu spustíme třikrát a uvidíme stejné pořadí testů, které se spouští, jak je uvedeno níže, testovací případy však mohou nebo nemusí být provedeny v seřazeném pořadí.
Okno konzoly zobrazilo výsledky níže - pořadí provádění testu je TestCase_3, TestCase_1 a TestCase_2 a pořadí se nemění s počtem spuštění.
Implementace kódu pro MethodSorters. JVM
Nyní budeme aktualizovat soubor „Junit4TestOrder.java“ MethodSorters.JVM
Fragment kódu pro Junit4TestOrder.java
@FixMethodOrder(MethodSorters . JVM ) public class JUnit4TestOrder {
Třídu spustíme dvakrát a pořadí provádění testů se při každém spuštění změní.
Okno konzoly pro První běh je zobrazen níže:
Okno konzoly pro druhý běh je zobrazen níže:
Pozorně sledujte změnu v pořadí, ve kterém jsou testy prováděny v obou bězích. Pořadí testů ve dvou bězích se lišilo.
Implementace kódu pro MethodSorters.NAME_ASCENDING
Nyní budeme aktualizovat soubor „Junit4TestOrder.java“ MethodSorters.NAME_ASCENDING
Fragment kódu pro Junit4TestOrder.java
@FixMethodOrder(MethodSorters.NAME_ASCENDING) public class JUnit4TestOrder {
Třídu jsme spustili dvakrát, pořadí provedených testů zůstává stejné a provádí se podle vzestupného pořadí názvu metody.
Okno konzoly zobrazuje výsledky testů provedených v pořadí TestCase_1, TestCase_2 a TestCase_3.
JUnit 5: @TestMethodOrder, @Order, Interface MethodOrderer
K řízení pořadí provádění testů pomáhají níže uvedené entity:
- Anotace @TestMethodOrder
- Anotace @Objednat
- Třídy, které patří do rozhraní MethodOrderer
Integrované třídy MethodOrderer a jejich podrobnosti jsou uvedeny níže:
MethodOrderer je postaven ve třídě | Z balíčku | Detaily |
---|---|---|
Alfanumerické | org.junit.jupiter.api.MethodOrderer.Alphanumeric | Seřadí testovací metody alfanumericky na základě jejich jmen |
OrderAnnotation | org.junit.jupiter.api.MethodOrderer.OrderAnnotation | Seřadí testovací metody numericky na základě hodnot předaných do anotace @Order |
Náhodný | org.junit.jupiter.api.MethodOrderer.Random | Řadí testovací metody náhodně, stejně jako v případě MethodSorters.JVM v JUnit 4 |
Pojďme se nyní podívat na ukázku každé z těchto strategií objednávání:
Implementace kódu pro Alphanumeric.class
Vytvořme soubor třídy JUnit 5 s názvem JUnit5TestOrder.java stejný jako JUnit4TestOrder.java a použijme anotaci s Alphanumeric.class k alfanumerickému řazení testů.
Kód pro Junit5TestOrder.java
@TestMethodOrder(Alphanumeric.class) public class JUnit5TestOrder { @Test public void Testcase_3() { System.out.println('Testcase_3 executes'); } @Test public void Testcase_1() { System.out.println('Testcase_1 executes'); } @Test public void Testcase_2() { System.out.println('Testcase_2 executes '); } }
Třídu jsme spustili třikrát a stále vidíme stejné pořadí testů spuštěných v alfanumericky seřazeném pořadí názvu testovací metody.
Po provedení souboru třídy, pořadí provedení testu:
- Testcase_1,
- Testcase_2 a
- Testcase_3
Poznámka: Alfanumerická strategie třídění rozlišuje velká a malá písmena takže v případě, že bychom měli další testovací případ s názvem testcase_1.
Pořadí provedení by bylo:
- Testcase_1,
- Testcase_2,
- Testcase_3,
- testcase_1.
Proto má velká písmena přednost před názvy metod malými písmeny.
Implementace kódu pro Random.class
Nyní aktualizujeme třídu JUnit 5 JUnit5TestOrder.java, aby používala anotaci s Random.class
Fragment kódu pro Junit5TestOrder.java
@TestMethodOrder (Random.class) public class JUnit5TestOrder {
Třídu jsme provedli dvakrát a viděli jsme, že pokaždé, když jsme třídu řídili, bylo pořadí provádění testu náhodně seřazeno.
Po spuštění souboru třídy pro poprvé , pořadí provedení testu bylo:
- Testcase_2,
- Testcase_1
- Testcase_3
Pořadí popravy, když běžel pro druhý čas ukázal:
- Testcase_2,
- Testcase_3
- Testcase_1 .
Implementace kódu pro OrderAnnotation.class
Nyní budeme aktualizovat třídu JUnit 5 JUnit5TestOrder.java, aby bylo možné použít anotaci OrderAnnotation.class. Anotace @Objednat bude také hrát důležitou roli při stanovování priorit testovacích metod zde.
Fragment kódu pro Junit5TestOrder.java
@TestMethodOrder(OrderAnnotation.class) public class JUnit5TestOrder { @Test @Order(1) public void Testcase_3() { System.out.println('Testcase_3 executes'); } @Test @Order(2) public void Testcase_1() { System.out.println('Testcase_1 executes'); } @Test @Order(3) public void Testcase_2() { System.out.println('Testcase_2 executes '); } }
Takže v této strategii nastavení pořadí pro provedení testu anotace @Order vynucuje spuštění testovacích metod podle hodnota objednávky být připraven na to.
Čím nižší je hodnota @Order pro testovací metodu, tím vyšší je její priorita během provádění.
Po provedení proběhlo pořadí testů následovně:
- Testcase_3,
- Testcase_1
- Testcase_2, protože pořadí nastavené pro testovací případy je 1,2, respektive 3.
Z tohoto důvodu nezáleží na tom, zda jsou testovací případy sepsány v pořádku. Kromě toho nezáleží na tom, zda jsou nebo nejsou názvy metod v alfanumerickém pořadí.
JUnit 5: Vytvoření vlastní objednávky
Kromě integrovaných tříd Order podporuje JUnit 5 také vlastní objednávky implementací rozhraní MethodOrderer . Počínaje verzí 5.4 JUnit 5 je podporováno vlastní řazení.
Podívejme se rychle, jak vytvořit a implementovat vlastní objednávku podle délky metody.
Krok 1: Vytvořil vlastní třídu objednávky implementující rozhraní MethodOrderer a pojmenoval třídu jako TestCaseLengthOrder
Kód pro TestCaseLengthOrder.java
public class TestCaseLengthOrder implements MethodOrderer { @Override public void orderMethods(MethodOrdererContext context) { MethodDescriptor md1; MethodDescriptor md2; context.getMethodDescriptors().sort((md1, md2)-> md1.getMethod().getName().length().compareTo(md2.getMethod().getName().length())); } }
Vysvětlení kódu TestCaseLengthOrder:
- Třída vlastní objednávky je vytvořena implementací rozhraní MethodOrderer.
- void orderMethods (MethodOrderContext context) {} metoda, která je vestavěnou metodou implementovanou z Interface MethodOrderer. Zde definujete implementaci logiky objednávání testů.
- MethodDescriptor je rozhraní, které obsahuje podrobnosti o metodě:
- Metoda MethodDescriptor.getMethod () získá název metody pro tento deskriptor.
- Název metody se převede na řetězec metodou getName (), tj. MethodDescriptor.getMethod (). GetName () a
- Metoda length () načte délku metody (stejně jako string.length () načte délku hodnoty řetězce).
- Všechny názvy metod jsou navzájem porovnávány pomocí metody compareTo ().
- Metoda getMethodDescriptors () získá seznam všech deskriptorů metody ve třídě.
- Metoda sort () třídí objekty MethodDescriptor.
Nyní, když jsme každému API MethodOrdereru jasně porozuměli, doufáme, že je snadné interpretovat výše uvedený kód.
Krok 2 : Použijte vlastní třídu objednávek, jako používáte jakoukoli předdefinovanou objednávku v testovací třídě.
Jako vstup do anotace @TestMethodOrder.
Kód pro JUnit_CustomOrder.java
@TestMethodOrder(TestCaseLengthOrder.class) class JUnit_CustomOrder{ @Test public void subt(){ } @Test public void add(){ } @Test public void multiply(){ } @Test public void divide(){ }
Krok 3:
Post poprava JUnit_CustomOrder.class , pořadí provedení testu je následující, založené na vzestupném pořadí délky názvu testovacích případů:
- přidat(),
- subt (),
- rozdělit ()
- násobit()
Závěr
Na závěr tohoto tutoriálu o JUnit Test Execution Order.
- Naučili jsme se, jak nastavit pořadí testovacích případů pomocí konkrétních anotací a konkrétních tříd.
- Naučili jsme se také různé způsoby objednání testů pro JUnit 4 a JUnit 5, na základě kterých se strategie objednávání změnily.
- Kromě toho jsme se naučili, jak v JUnit 5 můžeme také vytvořit přizpůsobenou třídu třídění a použít ji k objednání testovacích případů během jejich provádění.
=> Prohlédněte si příručku pro začátečníky JUnit zde.
Doporučené čtení
- Testy JUnit: Jak psát testovací případy JUnit s příklady
- Seznam anotací JUnit: JUnit 4 Vs JUnit 5
- Testovací případ JUnit Ignore: JUnit 4 @Ignore Vs JUnit 5 @Disabled
- JUnit Test Suite & Filtrační testovací případy: JUnit 4 Vs JUnit 5
- Co je testovací přípravek JUnit: Výukový program s příklady JUnit 4
- Výukový program JUnit pro začátečníky - Co je testování JUnit
- Několik způsobů provádění testů JUnit
- Jak paralelně provádět rozsáhlé provádění testů Appium