Хорошо написанный набор тестов будет состоять из нескольких тестов для конкретной функции. Группируя связанные функции, вы можете выразить связь между несколькими группами тестов. Одно из основных преимуществ группировки классов модульных тестов заключается в том, что это может уменьшить объем написанного тестового кода, поскольку сгруппированные тесты используют общие ресурсы.

JUnit 5 позволяет создавать вложенные тесты с помощью аннотации @Nested. В этой статье вы узнаете, что такое аннотация @Nested и как ее использовать.

Что такое вложенный тест?

Аннотация JUnit @Nested сигнализирует о том, что класс, с которым она связана, является внутренним классом, который является членом другого класса. Вложенный тест — это тестовый класс, который содержит аннотацию @Nested, так как это означает, что в тестовом классе верхнего уровня есть один (или несколько) внутренних классов. Вложенный класс может появиться в классе верхнего уровня или в классе, который также является вложенным.

Создание классов Java для тестирования

instagram viewer

Вложенный тестовый класс наследует все функции своего родительского класса. Поэтому лучшее время для создания вложенного теста — это когда есть логическая группировка тестовых случаев или когда один тестовый набор имеет разные функции. Хороший пример — когда вы хотите проверить способность класса создавать полезные объекты. Другой пример — когда один метод имеет две или более целей.

Вот пример класса, который вы можете использовать в розничном приложении, который демонстрирует, как вы можете создать вложенный тест.

публичныйсортКлиент{
защищенныйинт Пользовательский ИД;
защищенный Строка имя_клиента;
защищенный Строковый код клиента;

// конструктор по умолчанию
публичныйКлиент(){
этот.customerId = 0;
этот.customerName = "";
этот.customerCode = "";
}

// первичный конструктор
публичныйКлиент(инт идентификатор клиента, строка имя_заказчика, строка код_заказчика){
этот.customerId = идентификатор клиента;
этот.customerName = имя_клиента;
этот.customerCode = код клиента;
}

// конструктор копирования
публичныйКлиент(Клиент клиент){
этот.customerId = клиент.customerId;
этот.имя_клиента = имя_клиента.имя_клиента;
этот.customerCode = клиент.customerCode;
}

// геттеры и сеттеры
публичныйинтgetCustomerId(){
возвращаться Пользовательский ИД;
}

публичныйпустотаsetCustomerId(инт Пользовательский ИД){
этот.customerId = идентификатор клиента;
}

публичный Нить getCustomerName(){
возвращаться Имя Клиента;
}

публичныйпустотаsetCustomerName(строка имя_клиента){
этот.customerName = имя_клиента;
}

публичный Нить получитьCustomerCode(){
возвращаться Код клиента;
}

публичныйпустотаsetCustomerCode(Строка код клиента){
этот.customerCode = код клиента;
}

// определяем процент скидки для клиента в зависимости от типа клиента
публичныйдвойнойТип клиента(Строка код клиента){
двойной скидка = 0;

если (CustomerCode.toLowerCase().equals("pre")) {
скидка = 0.10;
} ещеесли (customerCode.toLowerCase().equals("gen")) {
скидка = 0.02;
} ещеесли (customerCode.toLowerCase().equals("новый")) {
скидка = 0.05;
}

возвращаться скидка;
}

// определяем grandTotal клиента на основе типа клиента
публичныйдвойнойобщий итог(двойной общий){
двойной скидка = тип клиента (Код клиента);
двойной Процент скидки = общая * скидка;
двойной finalTotal = total - DiscountPercentage;
возвращаться итоговая сумма;
}
}

Этот класс Customer содержит все компоненты класса Java с двумя методами.

Создание вложенного теста с помощью JUnit 5

Класс Customer имеет несколько конструкторов, геттеров и сеттеров, а также два метода. Вы можете создать вложенный класс (внутри тестового класса Customer), который создает новый объект Customer и тестирует все его компоненты.

Импортироватьстатическийорганизация.junit.Юпитер.апи.Утверждения.*;

Импортироватьорганизация.junit.Юпитер.апи.Отображаемое имя;
Импортироватьорганизация.junit.Юпитер.апи.Вложенный;
Импортироватьорганизация.junit.Юпитер.апи.Тест;

@DisplayName("Клиентский тестовый класс, показывающий, как СоздаватьВложенный Тесты.")
сортКлиентТест{
защищенныйинт идентификатор клиента = 301;
защищенная строка имя_клиента = "Майк Уилсон";
защищенная строка customerCode = "Предварительно";
защищенныйдвойной всего = 600;

@Вложенный
@Отображаемое имя("Вложенный тестовый класс Customer Builder в тестовом классе верхнего уровня")
сортCustomerBuilderTest{
Клиент клиент = новый Customer (customerId, customerName, customerCode);
двойной grandTotal = клиент.grandTotal (всего);

@Тест
@Отображаемое имя("Тестирование клиента's Конструкторы классов, геттеры и сеттеры, а также методы.")
пустотазаказчикстроитель(){
утверждатьВсе(() -> {
Утвердитьравно(Пользовательский ИД, клиент.getCustomerId());
Утвердитьравно(Имя Клиента, клиент.getCustomerName());
Утвердитьравно(Код клиента, клиент.getCustomerCode());
Утвердитьравно(0.10, клиент.Тип клиента(Код клиента));
assertEquals (540, grandTotal);
});
}
}
}

Класс CustomerTest является тестовым классом верхнего уровня для вложенного класса CustomerBuilderTest. CustomerBuilderTest создает новый объект Customer и тестирует его компоненты, используя тесты утверждений.

Выполнение тестового класса CustomerTest дает следующие успешные результаты теста:

Имена тестовых классов и тестового метода являются описательными и исчерпывающими, благодаря @DisplayName Аннотация.

Знание того, как тестировать программное обеспечение, имеет решающее значение

Технологии являются важным аспектом повседневной жизни для большинства людей. Ставки при создании программного обеспечения, которое делает именно то, для чего оно предназначено, никогда не были выше.

Беспилотный автомобиль, неправильно рассчитывающий близость к другому объекту, может стать причиной крупной аварии. Поэтому вам необходимо тестировать ваше приложение на каждом этапе его разработки.