Един добре написан пакет от тестове ще има няколко теста за конкретна функция. Чрез групиране на свързани функции можете да изразите връзката между няколко групи тестове. Едно от основните предимства на групирането на единични тестови класове е, че може да намали количеството тестов код, който пишете, тъй като групираните тестове споделят ресурси.
JUnit 5 ви позволява да създавате вложени тестове, като използвате @Nested анотацията. В тази статия ще научите какво представлява анотацията @Nested и как да я използвате.
Какво е вложен тест?
@Nested анотацията на JUnit сигнализира, че класът, с който се свързва, е вътрешен клас, който е член на друг клас. Вложеният тест е тестов клас, който съдържа анотацията @Nested, тъй като това означава, че има един (или повече) вътрешен клас в рамките на тестов клас от най-високо ниво. Вложен клас може да се появи в клас от най-високо ниво или в клас, който също е вложен.
Създаване на Java класове за тестване
Вложен тестов клас наследява всички характеристики на своя родителски клас. Следователно най-доброто време за създаване на вложен тест е, когато има логическо групиране на тестови случаи или когато един тестов случай има различни функции. Добър пример за това е, когато искате да тествате способността на класа да създава полезни обекти. Друг пример е, когато един метод има две или повече цели.
Ето примерен клас, който можете да използвате в приложение за продажба на дребно, който демонстрира как можете да създадете вложен тест.
публиченкласКлиент{
защитенивътр Клиентски номер;
защитени String customerName;
защитени String customerCode;// конструктор по подразбиране
публиченКлиент(){
това.customerId = 0;
това.customerName = "";
това.customerCode = "";
}// първичен конструктор
публиченКлиент(вътр customerId, String customerName, String customerCode){
това.customerId = customerId;
това.customerName = име на клиент;
това.customerCode = клиентски код;
}// конструктор за копиране
публиченКлиент(Клиент клиент){
това.customerId = customer.customerId;
това.customerName = customer.customerName;
това.customerCode = customer.customerCode;
}// гетери и сетери
публиченвътрgetCustomerId(){
връщане Клиентски номер;
}публиченневалиденsetCustomerId(вътр Клиентски номер){
това.customerId = customerId;
}публичен низ getCustomerName(){
връщане Потребителско име;
}публиченневалиденsetCustomerName(низ име на клиент){
това.customerName = име на клиент;
}публичен низ getCustomerCode(){
връщане код на клиента;
}публиченневалиденsetCustomerCode(низ customerCode){
това.customerCode = клиентски код;
}// определяне на процент отстъпка за клиента въз основа на типа клиент
публичендвойноcustomerType(низ customerCode){
двойно отстъпка = 0;ако (customerCode.toLowerCase().equals("pre")) {
отстъпка = 0.10;
} другоако (customerCode.toLowerCase().equals("gen")) {
отстъпка = 0.02;
} другоако (customerCode.toLowerCase().equals("нов")) {
отстъпка = 0.05;
}връщане отстъпка;
}
// определяне на grandTotal на клиент въз основа на типа клиент
публичендвойнообщо(двойно обща сума){
двойно отстъпка = customerType (customerCode);
двойно discountPercentage = общо * отстъпка;
двойно finalTotal = общо - процент на отстъпка;
връщане finalTotal;
}
}
Този клиентски клас съдържа всички компоненти на Java клас, заедно с два метода.
Създаване на вложен тест с JUnit 5
Класът Customer има няколко конструктора, гетери и сетери и два метода. Можете да създадете вложен клас (в рамките на тестовия клас Customer), който създава нов обект Customer и тества всички негови компоненти.
импортиранестатиченорг.junit.юпитер.api.Твърдения.*;
импортиранеорг.junit.юпитер.api.Показвано име;
импортиранеорг.junit.юпитер.api.Вложени;
импортиранеорг.junit.юпитер.api.Тест;@DisplayName("Клиентски тестов клас, показващ как да СъздавайтеВложени Тестове.")
класCustomerTest{
защитенивътр customerId = 301;
защитен низ име на клиент = "Майк Уилсън";
защитен низ customerCode = "Пред";
защитенидвойно общо = 600;@Вложено
@Показвано име("Customer Builder Вложен тестов клас в рамките на тестов клас от най-високо ниво")
класCustomerBuilderTest{
Клиент клиент = нов Клиент (customerId, customerName, customerCode);
двойно grandTotal = customer.grandTotal (общо);
@Тест
@Показвано име("Тестване на клиента's Конструктори на класове, средства за получаване и настройка и методи.")
невалиденcustomerBuilder(){
assertAll(() -> {
assertEquals(Клиентски номер, клиент.getCustomerId());
assertEquals(Потребителско име, клиент.getCustomerName());
assertEquals(код на клиента, клиент.getCustomerCode());
assertEquals(0.10, клиент.customerType(код на клиента));
assertEquals (540, grandTotal);
});
}
}
}
Класът CustomerTest е тестовият клас от най-високо ниво към вложен клас CustomerBuilderTest. CustomerBuilderTest създава нов обект Customer и тества неговите компоненти с помощта на тестове за твърдения.
Изпълнението на тестовия клас CustomerTest води до следните успешни резултати от теста:
Имената на тестовите класове и тестовия метод са описателни и изчерпателни, благодарение на Анотация @DisplayName.
Знанието как да тествате софтуер е от решаващо значение
Технологията е важен аспект от ежедневието на повечето хора. Залогът за създаване на софтуер, който прави точно това, което трябва да прави, никога не е бил по-висок.
Самоуправляваща се кола, която преценява погрешно близостта си до друг обект, може да причини голяма катастрофа. Следователно трябва да тествате вашето приложение на всеки етап от неговото развитие.