Dobre napísaná testovacia sada bude mať niekoľko testov pre konkrétnu funkciu. Zoskupením súvisiacich funkcií môžete vyjadriť vzťah medzi niekoľkými skupinami testov. Jednou z hlavných výhod zoskupovania tried testovania jednotiek je, že môže znížiť množstvo testovacieho kódu, ktorý napíšete, pretože zoskupené testy zdieľajú zdroje.

JUnit 5 vám umožňuje vytvárať vnorené testy pomocou anotácie @Nested. V tomto článku sa dozviete, čo je anotácia @Nested a ako ju používať.

Čo je to vnorený test?

Anotácia @Nested JUnit signalizuje, že trieda, s ktorou sa spája, je vnútornou triedou, ktorá je členom inej triedy. Vnorený test je testovacia trieda, ktorá obsahuje anotáciu @Nested, pretože to znamená, že v rámci testovacej triedy najvyššej úrovne existuje jedna (alebo viacero) vnútorných tried. Vnorená trieda sa môže objaviť v rámci triedy najvyššej úrovne alebo v rámci triedy, ktorá je tiež vnorená.

Vytváranie tried Java na testovanie

Vnorená testovacia trieda zdedí všetky vlastnosti svojej nadradenej triedy. Preto je najlepší čas na vytvorenie vnoreného testu vtedy, keď existuje logické zoskupenie testovacích prípadov alebo keď má jeden testovací prípad odlišné vlastnosti. Dobrým príkladom je, keď chcete otestovať schopnosť triedy vytvárať užitočné objekty. Ďalším príkladom je situácia, keď jedna metóda má dva alebo viac účelov.

instagram viewer

Tu je príklad triedy, ktorú môžete použiť v maloobchodnej aplikácii a ktorá ukazuje, ako môžete vytvoriť vnorený test.

verejnostitriedaZákazník{
chránenéint customerId;
chránené Reťazec customerName;
chránené reťazec zákaznícky kód;

// predvolený konštruktor
verejnostiZákazník(){
toto.customerId = 0;
toto.customerName = "";
toto.customerCode ="";
}

// primárny konštruktor
verejnostiZákazník(int customerId, String customerName, String customerCode){
toto.customerId = customerId;
toto.customerName = customerName;
toto.customerCode = zákaznícky kód;
}

// kopírovanie konštruktora
verejnostiZákazník(zákazník zákazník){
toto.customerId = customer.customerId;
toto.customerName = customer.customerName;
toto.customerCode = customer.customerCode;
}

// getters a setters
verejnostiintgetCustomerId(){
vrátiť customerId;
}

verejnostineplatnésetCustomerId(int customerId){
toto.customerId = customerId;
}

verejnosti Reťazec getCustomerName(){
vrátiť Meno zákazníka;
}

verejnostineplatnésetCustomerName(reťazec customerName){
toto.customerName = customerName;
}

verejnosti Reťazec getCustomerCode(){
vrátiť Zákaznický kód;
}

verejnostineplatnésetCustomerCode(reťazec zákaznícky kód){
toto.customerCode = zákaznícky kód;
}

// určiť percento zákazníckej zľavy na základe typu zákazníka
verejnostidvojitýcustomerType(reťazec zákaznícky kód){
dvojitý zľava = 0;

ak (customerCode.toLowerCase().equals("pre")) {
zľava = 0.10;
} inakak (customerCode.toLowerCase().equals("gen")) {
zľava = 0.02;
} inakak (customerCode.toLowerCase().equals("Nový")) {
zľava = 0.05;
}

vrátiť zľava;
}

// určenie celkového súčtu zákazníka na základe typu zákazníka
verejnostidvojitýúhrn(dvojitý Celkom){
dvojitý zľava = customerType (customerCode);
dvojitý zľavaPercentá = celkom * zľava;
dvojitý finalTotal = total - zľavaPercentage;
vrátiť finalTotal;
}
}

Táto trieda Customer obsahuje všetky komponenty triedy Java spolu s dvoma metódami.

Vytvorenie vnoreného testu s JUnit 5

Trieda Customer má niekoľko konštruktorov, getterov a nastavovačov a dve metódy. Môžete vytvoriť vnorenú triedu (v rámci triedy Customer test), ktorá vytvorí nový objekt Customer a otestuje všetky jeho komponenty.

importovaťstatickéorg.junit.jupiter.api.Tvrdenia.*;

importovaťorg.junit.jupiter.api.Zobraziť meno;
importovaťorg.junit.jupiter.api.Vnorené;
importovaťorg.junit.jupiter.api.Test;

@DisplayName("Trieda testovania zákazníkov ukazuje, ako na to VytvorteVnorené Testy.")
triedaZákaznícky test{
chránenéint customerId = 301;
chránený reťazec customerName = "Mike Wilson";
chránený reťazec customerCode = "Pre";
chránenédvojitý celkom = 600;

@ Nested
@Zobraziť meno("Customer Builder vnorená testovacia trieda v rámci testovacej triedy najvyššej úrovne")
triedaCustomerBuilderTest{
Zákazník zákazník = Nový Zákazník (customerId, customerName, customerCode);
dvojitý grandTotal = customer.grandTotal (celkom);

@Test
@Zobraziť meno("Testovanie zákazníka's Konštruktory tried, získavače a nastavovače a metódy.")
neplatnécustomerBuilder(){
claimAll(() -> {
tvrdiť Rovná sa(customerId, zákazníka.getCustomerId());
tvrdiť Rovná sa(Meno zákazníka, zákazníka.getCustomerName());
tvrdiť Rovná sa(Zákaznický kód, zákazníka.getCustomerCode());
tvrdiť Rovná sa(0.10, zákazníka.CustomerType(Zákaznický kód));
claimEquals (540, grandTotal);
});
}
}
}

Trieda CustomerTest je testovacia trieda najvyššej úrovne k vnorenej triede CustomerBuilderTest. CustomerBuilderTest vytvorí nový objekt Customer a otestuje jeho komponenty pomocou asertívnych testov.

Vykonaním testovacej triedy CustomerTest sa získajú nasledujúce úspešné výsledky testu:

Názvy testovacích tried a testovacia metóda sú popisné a komplexné, vďaka @DisplayName Anotácia.

Vedieť, ako testovať softvér, je rozhodujúce

Technológia je pre väčšinu ľudí dôležitou súčasťou každodenného života. Stávky na vytvorenie softvéru, ktorý robí presne to, čo má robiť, neboli nikdy vyššie.

Samoriadiace auto, ktoré zle vypočíta svoju blízkosť k inému objektu, môže spôsobiť veľkú nehodu. Preto musíte svoju aplikáciu otestovať v každej fáze jej vývoja.