O suită de teste bine scrisă va avea mai multe teste pentru o anumită caracteristică. Prin gruparea caracteristicilor asociate, puteți exprima relația dintre mai multe grupuri de teste. Unul dintre avantajele majore ale grupării claselor de teste unitare este că poate reduce cantitatea de cod de test pe care o scrieți, deoarece testele grupate împart resursele.

JUnit 5 vă permite să creați teste imbricate folosind adnotarea @Nested. În acest articol, veți afla ce este adnotarea @Nested și cum să o utilizați.

Ce este un test imbricat?

Adnotarea @Nested a lui JUnit semnalează că clasa cu care se asociază este o clasă interioară, care este membră a unei alte clase. Un test imbricat este o clasă de test care conține adnotarea @Nested, deoarece aceasta înseamnă că există una (sau mai multe) clase interioare într-o clasă de testare de nivel superior. O clasă imbricată poate apărea într-o clasă de nivel superior sau într-o clasă care este, de asemenea, imbricată.

Crearea claselor Java pentru testare

instagram viewer

O clasă de test imbricată moștenește toate caracteristicile clasei părinte. Prin urmare, cel mai bun moment pentru a crea un test imbricat este atunci când există o grupare logică a cazurilor de testare sau când un singur caz de testare are caracteristici diferite. Un bun exemplu în acest sens este atunci când doriți să testați capacitatea unei clase de a crea obiecte utile. Un alt exemplu este atunci când o singură metodă are două sau mai multe scopuri.

Iată un exemplu de clasă pe care o puteți utiliza într-o aplicație de vânzare cu amănuntul, care demonstrează cum puteți crea un test imbricat.

publicclasăClient{
protejatint Număr de înregistrare client;
protejat String customerName;
protejat String customerCode;

// constructor implicit
publicClient(){
acest.customerId = 0;
acest.customerName = "";
acest.customerCode ="";
}

// constructor primar
publicClient(int customerId, String customerName, String customerCode){
acest.customerId = customerId;
acest.customerName = customerName;
acest.customerCode = customerCode;
}

// constructor de copiere
publicClient(Client client){
acest.customerId = customer.customerId;
acest.customerName = customer.customerName;
acest.customerCode = customer.customerCode;
}

// getters și setters
publicintgetCustomerId(){
întoarcere Număr de înregistrare client;
}

publicgolsetCustomerId(int Număr de înregistrare client){
acest.customerId = customerId;
}

public Şir getCustomerName(){
întoarcere Numele clientului;
}

publicgolsetCustomerName(Șir clientNume){
acest.customerName = customerName;
}

public Şir getCustomerCode(){
întoarcere cod de client;
}

publicgolsetCustomerCode(Șir clientCod){
acest.customerCode = customerCode;
}

// determinăm un procentaj de reducere pentru client în funcție de tipul de client
publicdublatip de client(Șir clientCod){
dubla reducere = 0;

dacă (customerCode.toLowerCase().equals("pre")) {
reducere = 0.10;
} altfeldacă (customerCode.toLowerCase().equals("gen")) {
reducere = 0.02;
} altfeldacă (customerCode.toLowerCase().equals("nou")) {
reducere = 0.05;
}

întoarcere reducere;
}

// determină totalul general al unui client pe baza tipului de client
publicdublaTotal general(dubla total){
dubla discount = customerType (customerCode);
dubla discountProcentage = total * discount;
dubla finalTotal = total - discountProcentage;
întoarcere finalTotal;
}
}

Această clasă Client conține toate componentele unei clase Java, completate cu două metode.

Crearea unui test imbricat cu JUnit 5

Clasa Customer are mai mulți constructori, getters și setters și două metode. Puteți crea o clasă imbricată (în cadrul clasei de testare Client) care creează un nou obiect Client și testează toate componentele acestuia.

importstaticorg.junit.Jupiter.api.Aserţiuni.*;

importorg.junit.Jupiter.api.Numele de afișare;
importorg.junit.Jupiter.api.Cuibărit;
importorg.junit.Jupiter.api.Test;

@DisplayName ("Clasa de testare a clienților care arată cum să CreaCuibărit Teste.")
clasăCustomerTest{
protejatint customerId = 301;
protected String customerName = "Mike Wilson";
protected String customerCode = "Pre";
protejatdubla total = 600;

@Cuibărit
@Numele de afișare("Clasă de testare imbricată Creator de clienți într-o clasă de testare de nivel superior")
clasăCustomerBuilderTest{
Client client = nou Client (customerId, customerName, customerCode);
dubla grandTotal = client.grandTotal (total);

@Test
@Numele de afișare("Testarea Clientului's Constructori de clasă, Getters și Setters și Metode.")
golclientBuilder(){
assertAll(() -> {
assertEquals(Număr de înregistrare client, client.getCustomerId());
assertEquals(Numele clientului, client.getCustomerName());
assertEquals(cod de client, client.getCustomerCode());
assertEquals(0.10, client.tip de client(cod de client));
assertEquals (540, total total);
});
}
}
}

Clasa CustomerTest este clasa de testare de nivel superior pentru o clasă imbricată CustomerBuilderTest. CustomerBuilderTest creează un nou obiect Client și își testează componentele folosind teste de afirmare.

Executarea clasei de testare CustomerTest produce următoarele rezultate de test cu succes:

Numele claselor de testare și metoda de testare sunt descriptive și cuprinzătoare, datorită Adnotare @DisplayName.

A ști cum să testați software-ul este esențial

Tehnologia este un aspect important al vieții de zi cu zi pentru majoritatea oamenilor. Miza pentru crearea unui software care face exact ceea ce ar trebui să facă nu a fost niciodată mai mare.

O mașină cu conducere autonomă care calculează greșit apropierea de un alt obiect poate provoca un accident major. Prin urmare, trebuie să vă testați aplicația în fiecare etapă a dezvoltării acesteia.