Hästi kirjutatud testkomplektis on konkreetse funktsiooni jaoks mitu testi. Seotud tunnuseid rühmitades saate väljendada seost mitme testirühma vahel. Üksuse testklasside rühmitamise üks peamisi eeliseid on see, et see võib vähendada kirjutatava testkoodi hulka, kuna rühmitatud testid jagavad ressursse.

JUnit 5 võimaldab teil luua pesastatud teste, kasutades @Nested annotatsiooni. Sellest artiklist saate teada, mis on @Nested märkus ja kuidas seda kasutada.

Mis on pesastatud test?

JUniti annotatsioon @Nested annab märku, et klass, millega see seostub, on sisemine klass, mis on teise klassi liige. Pesastatud test on testklass, mis sisaldab @Pesastatud annotatsiooni, kuna see tähendab, et tipptasemel testklassis on üks (või mitu) sisemist klassi. Pesastatud klass võib ilmuda tippklassis või klassis, mis on samuti pesastatud.

Testitavate Java klasside loomine

Pesastatud testklass pärib kõik oma ülemklassi funktsioonid. Seetõttu on parim aeg pesastatud testi loomiseks siis, kui testjuhtumid on loogiliselt rühmitatud või kui ühel testjuhtumil on erinevad funktsioonid. Hea näide sellest on siis, kui soovite testida klassi võimet luua kasulikke objekte. Teine näide on see, kui ühel meetodil on kaks või enam eesmärki.

instagram viewer

Siin on näidisklass, mida võite jaemüügirakenduses kasutada ja mis näitab, kuidas saate luua pesastatud testi.

avalikklassKlient{
kaitstudint Kliendi ID;
kaitstud String kliendiNimi;
kaitstud String kliendikood;

// vaikekonstruktor
avalikKlient(){
see.customerId = 0;
see.customerName = "";
see.customerCode ="";
}

// esmane konstruktor
avalikKlient(int kliendi ID, string kliendinimi, string kliendikood){
see.customerId = kliendiId;
see.customerName = kliendiNimi;
see.customerCode = kliendikood;
}

// koopiakonstruktor
avalikKlient(Kliendi klient){
see.customerId = customer.customerId;
see.customerName = klient.kliendiNimi;
see.customerCode = customer.customerCode;
}

// getterid ja seadjad
avalikintgetCustomerId(){
tagasi Kliendi ID;
}

avaliktühinesetCustomerId(int Kliendi ID){
see.customerId = kliendiId;
}

avalik String hankigeCustomerName(){
tagasi Kliendi nimi;
}

avaliktühinesetCustomerName(String customerName){
see.customerName = kliendiNimi;
}

avalik String hankigeCustomerCode(){
tagasi kliendikood;
}

avaliktühinesetCustomerCode(string kliendikood){
see.customerCode = kliendikood;
}

// määrake kliendi tüübi alusel kliendi allahindlusprotsent
avalikkahekordnekliendi tüüp(string kliendikood){
kahekordne allahindlus = 0;

kui (customerCode.toLowerCase().equals("pre")) {
allahindlus = 0.10;
} muidukui (customerCode.toLowerCase().equals("gen")) {
allahindlus = 0.02;
} muidukui (customerCode.toLowerCase().equals("uus")) {
allahindlus = 0.05;
}

tagasi allahindlus;
}

// määrab kliendi üldsumma kliendi tüübi põhjal
avalikkahekordnekogusumma(kahekordne kokku){
kahekordne allahindlus = customerType (kliendikood);
kahekordne allahindlusprotsent = kokku * allahindlus;
kahekordne finalTotal = kokku - allahindlusprotsent;
tagasi lõplik Kokku;
}
}

See kliendiklass sisaldab kõiki Java-klassi komponente koos kahe meetodiga.

Pesatesti loomine JUnit 5-ga

Klientide klassis on mitu konstruktorit, getterit ja setterit ning kaks meetodit. Saate luua pesastatud klassi (kliendi testklassi sees), mis loob uue Kliendi objekti ja testib kõiki selle komponente.

importidastaatilineorg.junit.jupiter.api.Väited.*;

importidaorg.junit.jupiter.api.Kuvanimi;
importidaorg.junit.jupiter.api.Pesastatud;
importidaorg.junit.jupiter.api.Testi;

@DisplayName("Kliendi testiklass näitab, kuidas LooPesastatud Testid.")
klassKlienditest{
kaitstudint kliendi ID = 301;
kaitstud String kliendinimi = "Mike Wilson";
kaitstud String kliendikood = "Pre";
kaitstudkahekordne kokku = 600;

@Pesastatud
@DisplayName("Customer Builderi pesastatud testklass tipptasemel testklassis")
klassCustomerBuilderTest{
Kliendi klient = uus Klient (customerId, customerName, customerCode);
kahekordne grandTotal = klient.grandTotal (kokku);

@Test
@DisplayName("Kliendi testimine's Klassikonstruktorid, Getterid ja Setterid ning meetodid.")
tühinecustomerBuilder(){
assertAll(() -> {
kinnitama Võrdsed(Kliendi ID, klient.getCustomerId());
kinnitama Võrdsed(Kliendi nimi, klient.getCustomerName());
kinnitama Võrdsed(kliendikood, klient.getCustomerCode());
kinnitama Võrdsed(0.10, klient.customerType(kliendikood));
assertEquals (540, grandTotal);
});
}
}
}

CustomerTesti klass on pesastatud CustomerBuilderTesti klassi tipptaseme testklass. CustomerBuilderTest loob uue kliendiobjekti ja testib selle komponente kasutades kinnitustestid.

Testklassi CustomerTest täitmine annab järgmised edukad testitulemused:

Testiklasside nimetused ja katsemeetod on kirjeldavad ja kõikehõlmavad, tänu @DisplayName märkus.

Tarkvara testimise teadmine on ülioluline

Tehnoloogia on enamiku inimeste jaoks igapäevaelu oluline aspekt. Panused tarkvara loomisel, mis teeb täpselt seda, mida ta peaks tegema, pole kunagi olnud suurem.

Isejuhtiv auto, mis arvutab valesti oma läheduse teisele objektile, võib põhjustada suurõnnetuse. Seetõttu peate oma rakendust selle igas arendusetapis testima.