Dobro napisan skup testova imat će nekoliko testova za određenu značajku. Grupiranjem povezanih značajki možete izraziti odnos između nekoliko grupa testova. Jedna od glavnih prednosti grupiranja jedinica testnih klasa je ta što može smanjiti količinu testnog koda koji pišete, jer grupirani testovi dijele resurse.

JUnit 5 vam omogućuje stvaranje ugniježđenih testova pomoću @Nested anotacije. U ovom ćete članku naučiti što je @Nested anotacija i kako je koristiti.

Što je ugniježđeni test?

JUnit-ova napomena @Nested signalizira da je klasa kojoj je pridružena unutarnja klasa, koja je član druge klase. Ugniježđeni test je testna klasa koja sadrži napomenu @Nested, jer to znači da postoji jedna (ili više) unutarnjih klasa unutar testne klase najviše razine. Ugniježđena klasa može se pojaviti unutar klase najviše razine ili unutar klase koja je također ugniježđena.

Stvaranje Java klasa za testiranje

Ugniježđena testna klasa nasljeđuje sve karakteristike svoje nadređene klase. Stoga je najbolje vrijeme za izradu ugniježđenog testa kada postoji logično grupiranje testnih slučajeva ili kada jedan testni slučaj ima različite značajke. Dobar primjer ovoga je kada želite testirati sposobnost klase za stvaranje korisnih objekata. Drugi primjer je kada jedna metoda ima dvije ili više svrha.

instagram viewer

Evo primjera klase koju biste mogli koristiti u maloprodajnoj aplikaciji, koja pokazuje kako možete stvoriti ugniježđeni test.

javnostrazredaKupac{
zaštićenint customerId;
zaštićen String customerName;
zaštićen String customerCode;

// zadani konstruktor
javnostKupac(){
ovaj.customerId = 0;
ovaj.customerName = "";
ovaj.customerCode = "";
}

// primarni konstruktor
javnostKupac(int customerId, String customerName, String customerCode){
ovaj.customerId = customerId;
ovaj.customerName = customerName;
ovaj.customerCode = customerCode;
}

// kopiraj konstruktor
javnostKupac(Kupac kupac){
ovaj.customerId = customer.customerId;
ovaj.customerName = customer.customerName;
ovaj.customerCode = kupac.customerCode;
}

// primatelji i postavljači
javnostintgetCustomerId(){
povratak customerId;
}

javnostponištitisetCustomerId(int ID kupca){
ovaj.customerId = customerId;
}

javnost Niz getCustomerName(){
povratak Ime kupca;
}

javnostponištitisetCustomerName(String customerName){
ovaj.customerName = customerName;
}

javnost Niz getCustomerCode(){
povratak kod kupca;
}

javnostponištitisetCustomerCode(String customerCode){
ovaj.customerCode = customerCode;
}

// odredite postotak popusta kupca na temelju vrste kupca
javnostdvostrukocustomerType(String customerCode){
dvostruko popust = 0;

ako (customerCode.toLowerCase().equals("pre")) {
popust = 0.10;
} drugoako (customerCode.toLowerCase().equals("gen")) {
popust = 0.02;
} drugoako (customerCode.toLowerCase().equals("novi")) {
popust = 0.05;
}

povratak popust;
}

// odredite GrandTotal kupca na temelju tipa kupca
javnostdvostrukoukupno(dvostruko ukupno){
dvostruko popust = CustomerType (customerCode);
dvostruko postotak popusta = ukupni * popust;
dvostruko finalTotal = ukupno - postotak popusta;
povratak finalTotal;
}
}

Ova klasa Customer sadrži sve komponente Java klase, zajedno s dvije metode.

Stvaranje ugniježđenog testa s JUnit 5

Klasa Customer ima nekoliko konstruktora, gettera i postavljača te dvije metode. Možete stvoriti ugniježđenu klasu (unutar testne klase Kupac) koja stvara novi objekt Kupac i testira sve njegove komponente.

uvozstatičkiorg.junit.Jupiter.api.Tvrdnje.*;

uvozorg.junit.Jupiter.api.Ime za prikaz;
uvozorg.junit.Jupiter.api.Ugniježđeno;
uvozorg.junit.Jupiter.api.Test;

@DisplayName("Korisnička testna klasa koja pokazuje kako StvoritiUgniježđeno Testovi.")
razredaCustomerTest{
zaštićenint ID kupca = 301;
protected String customerName = "Mike Wilson";
zaštićeni niz customerCode = "Prije";
zaštićendvostruko ukupno = 600;

@Ugniježđeno
@PrikazName("Customer Builder ugniježđena testna klasa unutar testne klase najviše razine")
razredaCustomerBuilderTest{
Kupac kupac = novi Kupac (ID kupca, Ime kupca, Šifra kupca);
dvostruko grandTotal = kupac.grandTotal (ukupno);

@Test
@PrikazName("Testiranje kupca's Konstruktori klasa, Dobavljači i Postavljači i Metode.")
poništiticustomerBuilder(){
assertAll(() -> {
assertEquals(customerId, kupac.getCustomerId());
assertEquals(Ime kupca, kupac.getCustomerName());
assertEquals(kod kupca, kupac.getCustomerCode());
assertEquals(0.10, kupac.customerType(kod kupca));
assertEquals (540, grandTotal);
});
}
}
}

Klasa CustomerTest testna je klasa najviše razine ugniježđene klase CustomerBuilderTest. CustomerBuilderTest stvara novi objekt Customer i testira njegove komponente pomoću testovi tvrdnji.

Izvršenje testne klase CustomerTest daje sljedeće uspješne rezultate testa:

Nazivi ispitnih razreda i metoda ispitivanja su opisni i sveobuhvatni, zahvaljujući Napomena @DisplayName.

Znati kako testirati softver je ključno

Tehnologija je važan aspekt svakodnevnog života za većinu ljudi. Ulozi za stvaranje softvera koji radi upravo ono što bi trebao nikada nisu bili veći.

Samovozeći automobil koji pogrešno izračuna svoju blizinu drugom objektu može uzrokovati veliku nesreću. Stoga morate testirati svoju aplikaciju u svakoj fazi razvoja.