Egy jól megírt tesztcsomag több tesztet tartalmaz egy adott funkcióhoz. A kapcsolódó jellemzők csoportosításával több tesztcsoport közötti kapcsolat is kifejezhető. Az egységteszt-osztályok csoportosításának egyik fő előnye, hogy csökkentheti az Ön által írt tesztkód mennyiségét, mivel a csoportosított tesztek megosztják az erőforrásokat.
A JUnit 5 lehetővé teszi beágyazott tesztek létrehozását a @Nested megjegyzés használatával. Ebből a cikkből megtudhatja, mi az a @Nested annotáció, és hogyan kell használni.
Mi az a beágyazott teszt?
A JUnit @Nested annotációja azt jelzi, hogy az osztály, amelyhez társítja, egy belső osztály, amely egy másik osztály tagja. A beágyazott teszt egy tesztosztály, amely tartalmazza a @Nested annotációt, mivel ez azt jelenti, hogy egy (vagy több) belső osztály van egy felső szintű tesztosztályon belül. Egy beágyazott osztály megjelenhet egy legfelső szintű osztályon vagy egy szintén beágyazott osztályon belül.
Java osztályok létrehozása tesztelésre
A beágyazott tesztosztály örökli a szülőosztályának összes jellemzőjét. Ezért a legjobb idő egy beágyazott teszt létrehozására, ha a tesztesetek logikai csoportosítása létezik, vagy ha egyetlen teszteset különböző jellemzőkkel rendelkezik. Jó példa erre, amikor tesztelni akarjuk, hogy egy osztály képes-e hasznos objektumokat létrehozni. Egy másik példa, amikor egyetlen módszernek két vagy több célja van.
Íme egy példaosztály, amelyet kiskereskedelmi alkalmazásokban használhat, és amely bemutatja, hogyan hozhat létre beágyazott tesztet.
nyilvánososztályVevő{
védettint Ügyfél-azonosító;
védett String customerName;
védett String customerCode;// alapértelmezett konstruktor
nyilvánosVevő(){
ez.customerId = 0;
ez.customerName = "";
ez.customerCode ="";
}// elsődleges konstruktor
nyilvánosVevő(int ügyfélazonosító, vevőnév karakterlánc, ügyfélkód karakterlánc){
ez.customerId = ügyfélazonosító;
ez.customerName = ügyfélnév;
ez.customerCode = ügyfélkód;
}// másolás konstruktor
nyilvánosVevő(Ügyfél ügyfél){
ez.customerId = customer.customerId;
ez.customerName = customer.customerName;
ez.customerCode = customer.customerCode;
}// getterek és szetterek
nyilvánosintgetCustomerId(){
Visszatérés Ügyfél-azonosító;
}nyilvánosüressetCustomerId(int Ügyfél-azonosító){
ez.customerId = ügyfélazonosító;
}nyilvános Húr getCustomerName(){
Visszatérés Ügyfél neve;
}nyilvánosüressetCustomerName(karakterlánc customerName){
ez.customerName = ügyfélnév;
}nyilvános Húr getCustomerCode(){
Visszatérés ügyfélkód;
}nyilvánosüressetCustomerCode(karakterlánc ügyfélkód){
ez.customerCode = ügyfélkód;
}// vásárlói kedvezmény százalékának meghatározása az ügyfél típusa alapján
nyilvánoskettősügyféltípus(karakterlánc ügyfélkód){
kettős kedvezmény = 0;ha (customerCode.toLowerCase().equals("pre")) {
kedvezmény = 0.10;
} másha (customerCode.toLowerCase().equals("gen")) {
kedvezmény = 0.02;
} másha (customerCode.toLowerCase().equals("új")) {
kedvezmény = 0.05;
}Visszatérés kedvezmény;
}
// az ügyfél végösszegének meghatározása az ügyfél típusa alapján
nyilvánoskettősteljes összeg(kettős teljes){
kettős kedvezmény = ügyfélTípus (customerCode);
kettős kedvezményszázalék = összesen * kedvezmény;
kettős finalTotal = összesen - kedvezményszázalék;
Visszatérés finalTotal;
}
}
Ez a Customer osztály tartalmazza a Java osztály összes összetevőjét, két metódussal kiegészítve.
Beágyazott teszt létrehozása a JUnit 5 segítségével
A Customer osztály több konstruktort, gettert és settert, valamint két metódust tartalmaz. Létrehozhat egy beágyazott osztályt (a Customer tesztosztályon belül), amely létrehoz egy új Ügyfél objektumot, és teszteli annak összes összetevőjét.
importstatikusorg.junit.Jupiter.api.Állítások.*;
importorg.junit.Jupiter.api.Megjelenítendő név;
importorg.junit.Jupiter.api.Fészkelt;
importorg.junit.Jupiter.api.Teszt;@DisplayName("Ügyfél tesztosztály, amely bemutatja, hogyan kell TeremtBeágyazott tesztek.")
osztályÜgyfélteszt{
védettint ügyfélazonosító = 301;
Protected String customerName = "Mike Wilson";
védett String customerCode = "Elő";
védettkettős összesen = 600;@Beágyazott
@Megjelenítendő név("A Customer Builder beágyazott tesztosztálya a legfelső szintű tesztosztályon belül")
osztályCustomerBuilderTest{
Ügyfél ügyfél = új Ügyfél (customerId, customerName, customerCode);
kettős grandTotal = ügyfél.grandTotal (összesen);
@Teszt
@Megjelenítendő név("Az Ügyfél tesztelése's Osztálykonstruktorok, Getterek és Szállítók, valamint Metódusok.")
ürescustomerBuilder(){
assertAll(() -> {
asserEquals(Ügyfél-azonosító, vevő.getCustomerId());
asserEquals(Ügyfél neve, vevő.getCustomerName());
asserEquals(ügyfélkód, vevő.getCustomerCode());
asserEquals(0.10, vevő.ügyféltípus(ügyfélkód));
assertEquals (540, grandTotal);
});
}
}
}
A CustomerTest osztály a beágyazott CustomerBuilderTest osztály legfelső szintű tesztosztálya. A CustomerBuilderTest létrehoz egy új Ügyfél objektumot, és teszteli annak összetevőit állítási tesztek.
A CustomerTest tesztosztály végrehajtása a következő sikeres teszteredményeket eredményezi:
A tesztosztályok és a vizsgálati módszer elnevezése leíró és átfogó, köszönhetően a @DisplayName megjegyzés.
A szoftver tesztelésének ismerete kulcsfontosságú
A technológia a legtöbb ember számára a mindennapi élet fontos része. Soha nem volt nagyobb a tét egy olyan szoftver létrehozásának, amely pontosan azt csinálja, amit el kell végeznie.
Súlyos balesetet okozhat az önvezető autó, amely rosszul számolja ki egy másik tárgy közelségét. Ezért az alkalmazást a fejlesztés minden szakaszában tesztelni kell.