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

In JUnit, набір тестів дозволяє нам агрегувати всі тестові справи з кількох класів в одному місці та запускати їх разом.
Щоб запустити тест набору, вам потрібно анотувати клас, використовуючи наведені нижче анотації:
- @RunWith(Suite.class)
- @SuiteClasses(test1.клас, test2.клас…) або @Suite.SuiteClasses({test1.клас, test2.клас…})
З вищезазначеними анотаціями всі тестові класи в наборі почнуть виконуватися один за одним. Сам клас набору залишається порожнім: він є лише вмістителем анотацій, а виконавець зчитує ці анотації, щоб вирішити, що виконати.
Кроки для створення набору тестів і запуску тестів
Чотири кроки нижче створюють найменший набір, який фактично виконується: два звичайні тестові класи, клас набору, який їх іменує, та виконувач, який запускає набір з методу main.
Крок 1) Створіть простий тестовий клас (наприклад, MyFirstClassTest) та додайте метод з анотацією @Тест.
Перший клас містить один порожній метод тестування, чого достатньо, щоб довести, що набір його розпізнає:
Крок 2) Створіть ще один тестовий клас для додавання (наприклад, MySecondClassTest) та створіть метод з анотацією @Test.
Другий клас має точно таку ж форму, тому набір має два окремі класи для агрегації:
Крок 3) Щоб створити testSuite, спочатку потрібно анотувати клас за допомогою @RunWith(Suite.class) та @SuiteClasses(class1.class, class2.class…).
Зверніть увагу, що клас набору TestSuiteExample не оголошує власного методу тестування — дві анотації містять всю інформацію:
Крок 4) Створіть клас Test Runner для запуску нашого набору тестів, як зазначено нижче:
Бігун — це рівнина Java клас з основним методом, який передає клас набору до JUnitCore:
Code Пояснення:
- Code Лінія 8: Оголошення головного методу класу Test, який запускатиме наш JUnit тест.
- Code Лінія 9: Виконання тестових випадків за допомогою JUnitCore.runClasses, який приймає назву тестового класу як параметр (у наведеному вище прикладі ви використовуєте TestSuiteExample.class, показаний у кроці 3).
- Code Лінія 11: Обробка результату за допомогою циклу for та виведення невдалого результату.
- Code Лінія 13: Роздрукування успішного результату.
вихід: Ось результат, який показує успішне проходження тесту без збоїв tracе., як зазначено нижче:
Зелена смуга підтверджує, для чого призначений набір: один запуск, один перегляд результатів, і обидва класи відображаються під вузлом набору, а не у двох окремих запусках.
JUnit Приклад набору тестів
Розглянемо складніший приклад, у якому класи всередині набору фактично стверджувати щось замість того, щоб зберігати порожній метод.
JunitTest.java
JunitTest.java — це простий клас, анотований за допомогою @RunWith та @Suite анотації. Ви можете перерахувати будь-яку кількість класів у наборі як параметри, як зазначено нижче:
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, маючи тестовий метод для виведення повідомлення, як зазначено нижче. Ви будете використовувати цей клас як член набору в JunitTest.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); } }
Вихід
Після виконання JunitTest.java, який містить набір файлів SuiteTest1.java та SuiteTest2.java, ви отримаєте вивід, наведений нижче. Консоль виводить повідомлення, створені обома класами:
Команда JUnit перегляд записує той самий запуск, що й три успішно виконані методи тестування, згруповані в класі набору:
Примітка: Мітки консолі в цьому прикладі перекреслені — рядок, виведений SuiteTest1, має вигляд «Suite Test 2», а рядок, виведений SuiteTest2, — «Suite Test 1». Оригінальні списки відтворюються без змін, тому мітки залишаються такими, як їх написав автор; прочитайте назву класу в JUnit вигляд, а не друкована етикетка, коли ви зіставляєте вивід із джерелом.
Як створити набір тестів у JUnit 5
JUnit У версії 5 повністю видаляються бігуни, тому @RunWith(Suite.class) не існує в пакетах org.junit.jupiter. Набори переміщено до JUnit Платформа, яка відправляє їх в окремому артефакті під назвою двигун-пакету-платформи-junitДодайте цю залежність, а потім анотуйте клас за допомогою @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 Клас 5-го набору може оголошувати методи @BeforeSuite та @AfterSuite, які виконуються один раз для всього набору, а також JUnit 4 приклад вище все ще виконується на JUnit Платформа працює на старовинному движку, тому оригінальний код на цій сторінці не потрібно переписувати, щоб він продовжував працювати.
Переваги та обмеження JUnit Набори тестів
Люкс – це групаping механізм, а не тестовий фреймворк власного, і це формує як те, що воно робить добре, так і те, де воно перестає бути корисним.
Переваги
- Один запуск запускає пов'язані класи разом, тому димовий набір або регресія set запускається однією командою.
- У результатах кожен клас групується під одним вузлом набору, що полегшує виявлення спільної помилки.
- Список учасників зберігається в коді, тому він перевіряється та версіонується, як і будь-який інший вихідний файл.
- Той самий клас набору можна запустити з IDE, з виконавця, такого як JUnitЯдро або з інструменту збірки.
Недоліки
- @SuiteClasses — це жорстко закодований список, тому новий тестовий клас мовчки залишається поза кодом, доки хтось не відредагує набір.
- Набір не гарантує впорядкування поза порядком, у якому перелічені класи.
- Між класами-членами немає спільного елемента, тому люкс не замінює фікстуру чи базовий клас.
- Інструменти збірки вже виявляють тестові класи за допомогою правил іменування, що робить набір зайвим у багатьох проектах.
Типові помилки під час створення JUnit Набір тестів
Більшість проблем із пакетом програмного забезпечення призводять до появи короткого, некорисного повідомлення. У таблиці зіставлено повідомлення, з якими ви, ймовірно, зіткнетеся, з їхньою причиною та способами вирішення.
| Повідомлення або симптом | Викликати | виправляти |
| initializationError: Немає виконуваних методів | Клас виконується як звичайний тестовий клас, але він містить лише анотації. | Додайте @RunWith(Suite.class), щоб виконавець набору взяв на себе керування замість виконавця за замовчуванням. |
| не вдається знайти символ: клас Suite | Імпорт Suite відсутній. | Імпортуйте org.junit.runners.Suite разом з org.junit.runner.RunWith. |
| Набір працює, але заняття пропущено | Клас ніколи не додавався до списку @SuiteClasses. | Додайте клас явно або перемістіть його до @SelectPackages у JUnit 5. |
| Компілятор не приймає ім'я класу | @Runwith або @suiteClasses було введено з неправильним регістром літер. | Java Анотації чутливі до регістру: пишіть @RunWith та @SuiteClasses точно так само. |
| Тести в самому класі suite ніколи не виконуються | До власника набору було додано метод @Test. | Залиште тримач порожнім та перемістіть метод тестування до класу-члена. |
Написавши сюїту один раз і продовжуючиping це точність і є справжньою роботою. Якщо список відхиляється від класів на диску, пакет повідомляє зеленим кольором, поки частина одиничне випробування set взагалі ніколи не виконується, один із найтихіших режимів відмови в тестування програмного забезпечення.







