Hyvin kirjoitettu testipaketti sisältää useita testejä tietylle ominaisuudelle. Ryhmittelemällä toisiinsa liittyviä ominaisuuksia voit ilmaista useiden testiryhmien välisen suhteen. Yksi yksikkötestiluokkien ryhmittelyn suurimmista eduista on, että se voi vähentää kirjoittamasi testikoodin määrää, koska ryhmitetyt testit jakavat resursseja.

JUnit 5:n avulla voit luoda sisäkkäisiä testejä @Nested-merkinnällä. Tässä artikkelissa opit, mikä @Nested-merkintä on ja miten sitä käytetään.

Mikä on sisäkkäinen testi?

JUnitin @Nested-merkintä ilmaisee, että luokka, johon se liittyy, on sisäluokka, joka on toisen luokan jäsen. Sisäkkäinen testi on testiluokka, joka sisältää @Nested-merkinnän, koska tämä tarkoittaa, että ylätason testiluokassa on yksi (tai useampi) sisäluokka. Sisäkkäinen luokka voi esiintyä ylätason luokassa tai luokassa, joka on myös sisäkkäinen.

Testattavien Java-luokkien luominen

Sisäkkäinen testiluokka perii kaikki emoluokkansa ominaisuudet. Siksi paras aika sisäkkäisen testin luomiseen on, kun testitapaukset on ryhmitelty loogisesti tai kun yksittäisellä testitapauksella on erilaisia ​​ominaisuuksia. Hyvä esimerkki tästä on, kun haluat testata luokan kykyä luoda hyödyllisiä objekteja. Toinen esimerkki on, kun yhdellä menetelmällä on kaksi tai useampi tarkoitus.

instagram viewer

Tässä on esimerkkiluokka, jota voit käyttää vähittäismyyntisovelluksessa ja joka osoittaa, kuinka voit luoda sisäkkäisen testin.

julkinenluokkaaAsiakas{
suojattuint Asiakas ID;
suojattu merkkijono asiakkaanNimi;
suojattu merkkijono asiakaskoodi;

// oletuskonstruktori
julkinenAsiakas(){
Tämä.customerId = 0;
Tämä.customerName = "";
Tämä.customerCode ="";
}

// ensisijainen rakentaja
julkinenAsiakas(int customerId, String customerName, String customerCode){
Tämä.customerId = asiakastunnus;
Tämä.customerName = asiakkaanNimi;
Tämä.customerCode = asiakaskoodi;
}

// kopioida rakentaja
julkinenAsiakas(Asiakas asiakas){
Tämä.customerId = customer.customerId;
Tämä.customerName = asiakas.asiakkaanNimi;
Tämä.customerCode = customer.customerCode;
}

// Getterit ja asettajat
julkinenintgetCustomerId(){
palata Asiakas ID;
}

julkinenmitätönsetCustomerId(int Asiakas ID){
Tämä.customerId = asiakastunnus;
}

julkinen merkkijono getCustomerName(){
palata Asiakkaan nimi;
}

julkinenmitätönsetCustomerName(merkkijono customerName){
Tämä.customerName = asiakkaanNimi;
}

julkinen merkkijono getCustomerCode(){
palata asiakaskoodi;
}

julkinenmitätönsetCustomerCode(merkkijono customerCode){
Tämä.customerCode = asiakaskoodi;
}

// määrittää asiakkaan alennusprosentti asiakastyypin perusteella
julkinenkaksinkertainenasiakastyyppi(merkkijono customerCode){
kaksinkertainen alennus = 0;

jos (customerCode.toLowerCase().equals("pre")) {
alennus = 0.10;
} muujos (customerCode.toLowerCase().equals("gen")) {
alennus = 0.02;
} muujos (customerCode.toLowerCase().equals("Uusi")) {
alennus = 0.05;
}

palata alennus;
}

// määrittää asiakkaan kokonaissumma asiakastyypin perusteella
julkinenkaksinkertainenloppusumma(kaksinkertainen kaikki yhteensä){
kaksinkertainen alennus = asiakastyyppi (asiakaskoodi);
kaksinkertainen alennusprosentti = yhteensä * alennus;
kaksinkertainen finalTotal = yhteensä - alennusprosentti;
palata lopullinen Yhteensä;
}
}

Tämä asiakasluokka sisältää kaikki Java-luokan komponentit kahdella menetelmällä.

Sisäkkäisen testin luominen JUnit 5:llä

Asiakasluokassa on useita konstruktoreita, gettereitä ja asettajia sekä kaksi menetelmää. Voit luoda sisäkkäisen luokan (asiakastestiluokan sisällä), joka luo uuden asiakasobjektin ja testaa kaikki sen komponentit.

tuontistaattinenorg.junit.Jupiter.api.Väitteet.*;

tuontiorg.junit.Jupiter.api.Näyttönimi;
tuontiorg.junit.Jupiter.api.Sisäkkäinen;
tuontiorg.junit.Jupiter.api.Testata;

@DisplayName("Asiakastestiluokka, joka näyttää ohjeet LuodaSisäkkäinen Testit.")
luokkaaAsiakastesti{
suojattuint asiakastunnus = 301;
suojattu merkkijono customerName = "Mike Wilson";
suojattu merkkijono customerCode = "Pre";
suojattukaksinkertainen yhteensä = 600;

@Nested
@Näyttönimi("Customer Builderin sisäkkäinen testiluokka huipputason testiluokassa")
luokkaaCustomerBuilderTest{
Asiakas asiakas = Uusi Asiakas (customerId, customerName, customerCode);
kaksinkertainen grandTotal = asiakas.grandTotal (yhteensä);

@Testata
@Näyttönimi("Testaa asiakasta's Luokkakonstruktorit, Getterit ja setterit sekä menetelmät.")
mitätönCustomerBuilder(){
assertAll(() -> {
väittääEquals(Asiakas ID, asiakas.getCustomerId());
väittääEquals(Asiakkaan nimi, asiakas.getCustomerName());
väittääEquals(asiakaskoodi, asiakas.getCustomerCode());
väittääEquals(0.10, asiakas.asiakastyyppi(asiakaskoodi));
assertEquals (540, grandTotal);
});
}
}
}

CustomerTest-luokka on sisäkkäisen CustomerBuilderTest-luokan huipputason testiluokka. CustomerBuilderTest luo uuden asiakasobjektin ja testaa sen komponentteja käyttäen väitetestejä.

CustomerTest-testiluokan suorittaminen tuottaa seuraavat onnistuneet testitulokset:

Testiluokkien nimet ja testimenetelmä ovat kuvaavia ja kattavia, kiitos @DisplayName-merkintä.

Ohjelmistojen testaamisen tunteminen on ratkaisevan tärkeää

Teknologia on tärkeä osa jokapäiväistä elämää useimmille ihmisille. Panokset sellaisen ohjelmiston luomiselle, joka tekee täsmälleen sen, mitä sen pitäisi tehdä, eivät ole koskaan olleet suuremmat.

Itseajava auto, joka laskee väärin läheisyytensä toiseen kohteeseen, voi aiheuttaa suuronnettomuuden. Siksi sinun on testattava sovellustasi sen kaikissa kehitysvaiheissa.