Создавай JUnit Набор тестов с примером: @RunWith @SuiteClasses
⚡ Умное резюме
JUnit Наборы тестов объединяют тестовые случаи из нескольких классов, так что они выполняются вместе за один проход, управляемые аннотациями @RunWith(Suite.class) и @SuiteClasses и запускаемые через обычный класс запуска тестов.

In JUnitНабор тестов позволяет нам объединить все контрольные примеры Из нескольких классов в одном месте и запускайте их одновременно.
Для запуска набора тестов необходимо аннотировать класс, используя указанные ниже аннотации:
- @RunWith(Suite.class)
- @SuiteClasses(test1.class, test2.class…) или @Suite.SuiteClasses({test1.class, test2.class…})
С помощью указанных выше аннотаций все тестовые классы в наборе начнут выполняться один за другим. Сам класс набора остается пустым: он служит лишь хранилищем для аннотаций, а исполнитель тестов считывает эти аннотации, чтобы решить, что выполнять.
Шаги по созданию набора тестов и средства выполнения тестов
Четыре описанных ниже шага позволяют создать самый маленький набор тестов, который фактически будет выполняться: два обычных класса тестов, класс набора тестов, который дает им имена, и исполнитель, который запускает набор тестов из метода main.
Шаг 1) Создайте простой тестовый класс (например, MyFirstClassTest) и добавьте метод, аннотированный с помощью @Контрольная работа.
Первый класс содержит единственный пустой метод для проверки, чего достаточно, чтобы доказать, что набор тестов его распознает:
Шаг 2) Создайте еще один тестовый класс для добавления (например, MySecondClassTest) и создайте метод, аннотированный @Test.
Второй класс имеет точно такую же структуру, поэтому в наборе данных есть два отдельных класса для агрегирования:
Шаг 3) Для создания набора тестов необходимо сначала аннотировать класс с помощью @RunWith(Suite.class) и @SuiteClasses(class1.class, class2.class…).
Обратите внимание, что класс TestSuiteExample не объявляет собственный тестовый метод — вся информация содержится в двух аннотациях:
Шаг 4) Создайте класс Test Runner для запуска нашего набора тестов, как показано ниже:
Бегун — это равнина Java класс с методом main, который передает класс набора задач JUnitCore:
Code Объяснение:
- Code Линия 8: Объявление основного метода класса Test, который будет запускать наш код. JUnit тест.
- Code Линия 9: Выполнение тестовых случаев с использованием JUnitCore.runClasses принимает в качестве параметра имя тестового класса (в приведенном выше примере используется TestSuiteExample.class, показанный на шаге 3).
- Code Линия 11: Обработка результата с помощью цикла for и вывод на экран сообщения об ошибке.
- Code Линия 13: Распечатка успешного результата.
Выход: Вот результат, подтверждающий успешное проведение теста без сбоев. trace, как указано ниже:
Зеленая полоса подтверждает назначение набора тестов: один запуск, одно отображение результатов, и оба класса отображаются под узлом набора тестов, а не в двух отдельных запусках.
JUnit Пример тестового набора
Рассмотрим более сложный пример, в котором классы внутри набора фактически утверждать Вместо того чтобы хранить пустой метод, можно использовать что-то другое.
ЮнитТест.java
JunitTest.java — это простой класс, аннотированный с помощью @Бежать с и @Люкс аннотации. В качестве параметров можно указать любое количество классов из набора, как показано ниже:
package guru99.junit; import org.junit.runner.RunWith; import org.junit.runners.Suite; @RunWith(Suite.class) @Suite.SuiteClasses({ SuiteTest1.class, SuiteTest2.class, }) public class JunitTest { // This class remains empty, it is used only as a holder for the above annotations }
SuiteTest1.java
SuiteTest1.java Это тестовый класс, содержащий тестовые методы, которые выводят сообщение, как показано ниже. Вы будете использовать этот класс в качестве члена набора тестов в упомянутом выше классе. Он зависит от вспомогательного класса с именем JUnitСообщение, которое определено в другом месте того же пакета и здесь не воспроизводится.
package guru99.junit; import static org.junit.Assert.assertEquals; import org.junit.Test; public class SuiteTest1 { public String message = "Saurabh"; JUnitMessage junitMessage = new JUnitMessage(message); @Test(expected = ArithmeticException.class) public void testJUnitMessage() { System.out.println("Junit Message is printing "); junitMessage.printMessage(); } @Test public void testJUnitHiMessage() { message = "Hi!" + message; System.out.println("Junit Hi Message is printing "); assertEquals(message, junitMessage.printHiMessage()); System.out.println("Suite Test 2 is successful " + message); } }
SuiteTest2.java
SuiteTest2.java это еще один тестовый класс, похожий на SuiteTest1.javaВ этом классе есть тестовый метод для вывода сообщения, как показано ниже. Вы будете использовать этот класс в качестве члена набора тестов. ЮнитТест.java.
package guru99.junit; import org.junit.Assert; import org.junit.Test; public class SuiteTest2 { @Test public void createAndSetName() { String expected = "Y"; String actual = "Y"; Assert.assertEquals(expected, actual); System.out.println("Suite Test 1 is successful " + actual); } }
Результат
После выполнения ЮнитТест.java, который содержит набор файлов, включающих SuiteTest1.java и SuiteTest2.javaВ результате вы получите приведенный ниже вывод. В консоли отображаются сообщения, созданные обоими классами:
JUnit Просмотрите записи о выполнении одного и того же теста, используя три успешно прошедших тестовых метода, сгруппированных в класс suite:
Примечание: В этом примере метки консоли перечеркнуты — строка, выводимая SuiteTest1, читается как «Suite Test 2», а строка, выводимая SuiteTest2, читается как «Suite Test 1». Исходные записи воспроизводятся без изменений, поэтому метки остаются такими, какими их написал автор; имя класса можно прочитать в JUnit При сопоставлении выходных данных с исходными данными используйте в качестве ориентира текст, а не печатную этикетку.
Как создать набор тестов в JUnit 5
JUnit В версии 5 полностью удалены средства запуска тестов, поэтому аннотация @RunWith(Suite.class) отсутствует в пакетах org.junit.jupiter. Наборы тестов перемещены в... JUnit Платформа, которая поставляет их в отдельном артефакте, называемом junit-platform-suite-engineДобавьте эту зависимость, затем аннотируйте класс с помощью аннотации `@Suite` и одной из аннотаций селектора.
import org.junit.platform.suite.api.SelectClasses; import org.junit.platform.suite.api.Suite; import org.junit.platform.suite.api.SuiteDisplayName; @Suite @SuiteDisplayName("Guru99 suite") @SelectClasses({ SuiteTest1.class, SuiteTest2.class }) public class JunitTest { // Empty holder, exactly as in JUnit 4 }
Аннотации селекторов заменяют единый список `@SuiteClasses` небольшим набором параметров:
| аннотирование | Что он выбирает |
| @SelectClasses | Отдельные тестовые классы, названные по отдельности, являются прямой заменой @SuiteClasses. |
| @SelectPackages | Каждый тестовый класс в указанном пакете и во всех его подпакетах. |
| @IncludeClassNamePatterns | К выделенной области применяется фильтр на основе регулярных выражений. |
| @SuiteDisplayName | Вместо названия класса в отчете будет отображаться читаемое имя. |
На практике важны еще два различия. А. JUnit Класс suite может объявлять методы `@BeforeSuite` и `@AfterSuite`, которые выполняются один раз для всего набора данных, и JUnit Пример 4 выше по-прежнему выполняется. JUnit Благодаря использованию винтажного движка, исходный код этой страницы не требует переписывания для обеспечения его работоспособности.
Преимущества и ограничения JUnit Наборы тестов
Номер люкс — это группаping механизм, а не тестовая среда Оно самодостаточно, и это определяет как его сильные стороны, так и то, где оно перестаёт быть полезным.
Преимущества
- Один запуск объединяет смежные классы, например, дымовой зал или... регресс Запуск системы осуществляется одной командой.
- В представлении результатов все классы объединены в один узел набора тестов, что упрощает обнаружение общих ошибок.
- Список участников хранится в коде, поэтому он проверяется и версионируется, как и любой другой исходный файл.
- Один и тот же набор тестов можно запустить из IDE, из средства выполнения, например, JUnitИз ядра или из инструмента сборки.
Ограничения
- @SuiteClasses — это жёстко заданный список, поэтому новый тестовый класс незаметно исключается из списка до тех пор, пока кто-нибудь не отредактирует набор тестов.
- Данный пакет программ не гарантирует сохранение порядка следования элементов, за исключением того, в каком именно порядке они перечислены.
- Между группами участников ничего не является общим, поэтому номер люкс не заменяет собой матч или базовый класс.
- Инструменты сборки уже обнаруживают тестовые классы по соглашению об именовании, что делает набор тестов избыточным во многих проектах.
Распространенные ошибки при создании JUnit Тестирование
Большинство проблем с программным обеспечением выдают короткое и бесполезное сообщение. В таблице показано, с какими сообщениями вы, скорее всего, столкнетесь, каковы их причины и способы решения.
| Сообщение или симптом | Вызывать | фиксированный |
| initializationError: No runable methods | Этот класс запускается как обычный тестовый класс, но содержит только аннотации. | Добавьте аннотацию @RunWith(Suite.class), чтобы средство запуска тестов пакета перехватывало управление вместо средства запуска по умолчанию. |
| Не удалось найти символ: класс Suite | Отсутствует импорт пакета Suite. | Импортируйте org.junit.runners.Suite вместе с org.junit.runner.RunWith. |
| Занятие проводится, но урок пропущен. | Данный класс так и не был добавлен в список @SuiteClasses. | Добавьте класс явно или переместите его в аннотацию @SelectPackages. JUnit 5. |
| Компилятор не принимает имя класса. | @Runwith или @suiteClasses были введены с неправильным регистром. | Java Аннотации чувствительны к регистру: пишите @RunWith и @SuiteClasses точно так, как указано. |
| Тесты, находящиеся непосредственно в классе набора тестов, никогда не запускаются. | В контейнер для тестовых наборов был добавлен метод `@Test`. | Оставьте поле пустым и переместите тестовый метод в класс-член. |
Напишите весь пакет документов один раз и продолжайте.ping Настоящая работа заключается в точности. Если список отклоняется от классов на диске, пакет программ выдает зеленый результат, в то время как часть модульный тест Команда set вообще не выполняется, это один из самых незаметных режимов сбоя. тестирование программного обеспечения.







