junit test execution order
Цей підручник пояснює, як встановити порядок виконання для тестових випадків JUnit. Ви дізнаєтесь про Анотації та класи для встановлення порядку виконання тесту JUnit у JUnit 4 проти JUnit 5:
Ми дізналися, як створити набір тестів, як додати категорію або тег до тестових кейсів та як відфільтрувати тести (виключити або включити тестові кейси) на основі категорії чи тегу в нашому попередньому підручнику.
Крім того, ми дізналися, що в JUnit 4 ми маємо @Category, @IncludeCategory, і @ExcludeCategory для фільтрації тестових кейсів, поки JUnit 5 має @IncludeTags і @ExcludeTags зробити те саме.
JUnit 5 має додаткові параметри фільтрації з використанням анотацій @IncludePackages, @ExcludePackages, а також анотації для включення або виключення класів із використанням шаблонів імен класів.
=> Перегляньте тут, щоб побачити A-Z навчальних посібників JUnit .
Що ви дізнаєтесь:
Порядок виконання тесту JUnit
У цьому підручнику ми дізнаємося, як встановити порядок для кожного тестового випадку, щоб вони працювали у встановленому порядку. Ми дізнаємось, як замовити тести в JUnit 4, а також в JUnit 5.
Методи тестування не відповідають певному порядку за замовчуванням.Тестові кейси не обов'язково виконувати в тому порядку, в якому вони були написані.
Існують різні способи або режими встановлення порядку виконання для тестових випадків. Ми також глибоко заглибимося в те, як змінюється JUnit 4, упорядковуючи тестові приклади порівняно з JUnit 5.
JUnit 4: @FixedMethodOrder, Class MethodSorters
Починаючи з JUnit 4.11, ми маємо анотацію @FixMethodOrder і MethodSorters.class підтримка можливості встановлення замовлення на виконання тесту.
Пакунок org.junit.runners. * потрібно імпортувати, щоб включити клас MethodSorters . Цей клас вирішує, як потрібно замовляти тестові кейси. MethodSorters мати три перерахування значення.
Нижче наведені значення переліку класу разом із метою, котре служить кожне із значень:
MethodSorters.DEFAULT | Це значення перерахування сортує виконання тесту в певному порядку. Однак ніколи не можна передбачити, в якому порядку він може запускати тестові випадки. |
Ось чому, ви маєте контроль над своїм рішенням щодо того, який тестовий тест повинен виконуватися першим, а який - наступним. | |
Я спостерігав, що при виконанні клас із декількома методами, відсортованими за допомогою перерахування DEFAULT, замовлення залишається незмінним кожного разу під час виконання тесту. | |
Однак я ніяк не міг передбачити чи зрозуміти спосіб встановлення замовлення. | |
MethodSorters.JVM | Порядок виконання тесту з переліченням JVM, як випливає з назви, визначається JVM. |
У цьому випадку кожного разу, коли ви запускаєте клас, тести виконуватимуться не в однаковому, а в довільному порядку. | |
Іншими словами, порядок тестів змінюється під час кожного циклу. | |
MethodSorters.NAME_ASCENDING | Цей перелік сортує методи тестування в лексикографічному порядку назви методу. Отже, ви можете бути впевнені, що це найбільш передбачуваний спосіб замовлення виконання тесту. |
Отже, ви можете заздалегідь прийняти рішення про послідовність тестів, виходячи з лексикографічного порядку названої вами назви. |
Анотація @FixedMethodOrder приймає вхідний параметр MethodSorters з його перерахованим значенням. Пакет, необхідний для анотації, є org.junit.FixedMethodOrder.
Подивимось, як це реалізовано за допомогою коду.
Впровадження коду для MethodSorters.DEFAULT
Давайте створимо файл класу JUnit ‘ Junit4TestOrder.java ' де ми будемо використовувати MethodSorters.DEFAULT
Код для Junit4TestOrder.java
@FixMethodOrder(MethodSorters.DEFAULT) public class JUnit4TestOrder { @Test public void Testcase_3() { System.out.println('Testcase_3 executes'); } @Test public void Testcase_1() { System.out.println('Testcase_1 executes'); } @Test public void Testcase_2() { System.out.println('Testcase_2 executes '); } }
Ми тричі запускаємо клас і бачимо той самий порядок тестів, що й нижче, однак тестові кейси можуть виконуватися або не виконуватися у відсортованому порядку.
У вікні консолі відображалися результати, як показано нижче - порядок виконання тесту - TestCase_3, TestCase_1 і TestCase_2, і порядок не змінюється залежно від кількості запусків.
Впровадження коду для MethodSorters. JVM
Тепер ми оновимо ‘Junit4TestOrder.java’, щоб мати MethodSorters.JVM
Фрагмент коду для Junit4TestOrder.java
@FixMethodOrder(MethodSorters . JVM ) public class JUnit4TestOrder {
Ми запускаємо клас двічі, і порядок виконання тестів змінюється з кожним запуском.
Вікно консолі для спочатку пробіг, як показано нижче:
Вікно консолі для друге пробіг, як показано нижче:
Уважно спостерігайте за зміною порядку послідовності виконання тестів під час обох циклів. Порядок випробувань у двох прогонах різнився.
Впровадження коду для MethodSorters.NAME_ASCENDING
Тепер ми оновимо ‘Junit4TestOrder.java’, щоб мати MethodSorters.NAME_ASCENDING
Фрагмент коду для Junit4TestOrder.java
@FixMethodOrder(MethodSorters.NAME_ASCENDING) public class JUnit4TestOrder {
Ми запускаємо клас двічі, порядок виконання тестів залишається незмінним і виконується за зростанням імені методу.
У вікні консолі відображаються результати тестів, виконаних у порядку TestCase_1, TestCase_2 та TestCase_3.
JUnit 5: @TestMethodOrder, @Order, Interface MethodOrderer
Щоб контролювати порядок виконання тестів, наведені нижче сутності допомагають зробити те ж саме:
- Анотація @TestMethodOrder
- Анотація @Order
- Класи, що належать до інтерфейсів MethodOrderer
Вбудовані класи MethodOrderer та їх деталі є такими:
MethodOrderer вбудований у клас | З упаковки | Деталі |
---|---|---|
Буквено-цифрові | org.junit.jupiter.api.MethodOrderer.Alfhanumeric | Сортує методи тестування буквено-цифрові на основі їх назв |
Анотація замовлення | org.junit.jupiter.api.MethodOrderer.OrderAnnotation | Сортує методи тестування чисельно на основі значень, що передаються в анотацію @Order |
Випадкові | org.junit.jupiter.api.MethodOrderer.Random | Сортує методи випробування випадковим чином, як у випадку MethodSorters.JVM у JUnit 4 |
Давайте зараз розглянемо демонстрацію кожної з цих стратегій замовлення:
Впровадження коду для буквено-цифрового.класу
Давайте створимо файл класу JUnit 5 з назвою JUnit5TestOrder.java так само, як і JUnit4TestOrder.java, і давайте використаємо анотацію з Alphanumeric.class, щоб замовити тести буквено-цифровим способом.
Код для Junit5TestOrder.java
@TestMethodOrder(Alphanumeric.class) public class JUnit5TestOrder { @Test public void Testcase_3() { System.out.println('Testcase_3 executes'); } @Test public void Testcase_1() { System.out.println('Testcase_1 executes'); } @Test public void Testcase_2() { System.out.println('Testcase_2 executes '); } }
Ми тричі провели клас і досі бачимо той самий порядок тестів, який виконується в алфавітно-цифровому відсортованому порядку імені методу тестування.
Після виконання файлу класу, порядок виконання тесту:
- Testcase_1,
- Testcase_2 та
- Testcase_3
Примітка: Буквено-цифрове сортування чутливий до регістру тож на той випадок, коли ми мали ще один тестовий приклад з назвою testcase_1.
Порядок виконання буде таким:
- Testcase_1,
- Testcase_2,
- Testcase_3,
- testcase_1.
Отже, верхній регістр має пріоритет над іменами методів нижнього регістру.
Впровадження коду для Random.class
Тепер ми оновимо клас JUnit 5 JUnit5TestOrder.java, щоб використовувати анотацію з Random.class
Фрагмент коду для Junit5TestOrder.java
@TestMethodOrder (Random.class) public class JUnit5TestOrder {
Ми провели клас двічі, і ми побачили, що кожного разу, коли ми запускали клас, порядок виконання тесту був довільно впорядкований.
Після виконання файлу класу для перший раз , порядок виконання тесту був:
- Testcase_2,
- Testcase_1
- Testcase_3
Порядок виконання при запуску на друге час показав:
- Testcase_2,
- Testcase_3
- Testcase_1 .
Впровадження коду для OrderAnnotation.class
Тепер ми оновимо клас JUnit 5 JUnit5TestOrder.java, щоб використовувати анотацію з OrderAnnotation.class. Анотація @ Замовити також відіграватиме важливу роль у встановленні пріоритету методів випробувань тут.
Фрагмент коду для Junit5TestOrder.java
@TestMethodOrder(OrderAnnotation.class) public class JUnit5TestOrder { @Test @Order(1) public void Testcase_3() { System.out.println('Testcase_3 executes'); } @Test @Order(2) public void Testcase_1() { System.out.println('Testcase_1 executes'); } @Test @Order(3) public void Testcase_2() { System.out.println('Testcase_2 executes '); } }
Отже, у цій стратегії встановлення порядку для виконання тесту, анотація @Order забезпечує застосування методів тестування, що запускаються відповідно до вартість замовлення встановлюється для цього.
Чим нижче значення @Order для тестового методу, тим вищим є його пріоритет під час виконання.
Після виконання, порядок тестів виконувався наступним чином:
- Testcase_3,
- Testcase_1
- Testcase_2, оскільки порядок встановлення для тестових кейсів - 1,2 та 3 відповідно.
Ось чому не має значення, чи тестові кейси написані в порядку. Крім того, не має значення, чи назви методів мають букви чи цифри чи ні.
JUnit 5: Створення власного замовлення
Крім того, вбудовані класи замовлення, JUnit 5 також підтримує власні замовлення шляхом реалізації інтерфейсу MethodOrderer . Починаючи з версії 5.4 JUnit 5, підтримується спеціальне сортування.
Давайте швидко побачимо, як створити та реалізувати власний порядок за довжиною методу.
Крок 1: Створив власний клас замовлення, що реалізує інтерфейс MethodOrderer, і назвав клас TestCaseLengthOrder
Код для TestCaseLengthOrder.java
public class TestCaseLengthOrder implements MethodOrderer { @Override public void orderMethods(MethodOrdererContext context) { MethodDescriptor md1; MethodDescriptor md2; context.getMethodDescriptors().sort((md1, md2)-> md1.getMethod().getName().length().compareTo(md2.getMethod().getName().length())); } }
Пояснення коду TestCaseLengthOrder:
- Клас власного замовлення створюється шляхом реалізації інтерфейсу MethodOrderer.
- void orderMethods (MethodOrderContext context) {} метод, який є вбудованим методом, реалізованим з Interface MethodOrderer. Ось де ви визначаєте реалізацію логіки тестового впорядкування.
- MethodDescriptor - це інтерфейс, який містить детальну інформацію про метод:
- Метод MethodDescriptor.getMethod () отримує ім'я методу для цього дескриптора.
- Ім'я методу перетворюється на String за допомогою методу getName (), тобто MethodDescriptor.getMethod (). GetName () та
- Метод length () отримує довжину методу (так само, як string.length () отримує довжину значення рядка).
- Всі імена методів порівнюються між собою за допомогою методу compareTo ().
- Метод getMethodDescriptors () отримує список усіх дескрипторів методів у класі.
- Метод sort () сортує об'єкти MethodDescriptor.
Тепер, коли ми чітко зрозуміли кожен API MethodOrderer, ми сподіваємось, що інтерпретувати наведений вище код легко.
Крок 2 : Використовуйте спеціальний клас замовлення, як будь-який вбудований порядок у тестовому класі.
Як вхід до анотації @TestMethodOrder.
Код для JUnit_CustomOrder.java
@TestMethodOrder(TestCaseLengthOrder.class) class JUnit_CustomOrder{ @Test public void subt(){ } @Test public void add(){ } @Test public void multiply(){ } @Test public void divide(){ }
Крок 3:
Після виконання JUnit_CustomOrder.class , порядок виконання тесту є наступним, виходячи із порядку зростання довжини назви тестів:
- add (),
- subt (),
- розділити ()
- помножити ()
Висновок
На закінчення цього підручника з Порядку виконання тесту JUnit.
- Ми дізналися, як встановити порядок тестових випадків, використовуючи конкретні анотації, а також конкретні класи.
- Ми також вивчили різні способи замовлення тестів для JUnit 4 та JUnit 5, на основі яких змінювалися стратегії замовлення.
- Крім того, ми дізналися, як у JUnit 5 ми також можемо створити власний клас сортування та використовувати його для впорядкування тестових кейсів під час їх виконання.
=> Погляньте на посібник для початківців JUnit тут.
Рекомендована література
- Тести JUnit: Як написати приклади тестів JUnit на прикладах
- Список анотацій JUnit: JUnit 4 проти JUnit 5
- JUnit Ignore Test Case: JUnit 4 @Ignore Vs JUnit 5 @Disabled
- Набір тестів JUnit і фільтрація тестових випадків: JUnit 4 проти JUnit 5
- Що таке тестовий пристрій JUnit: Підручник з прикладами JUnit 4
- Підручник з JUnit для початківців - що таке тестування JUnit
- Кілька способів виконання тестів JUnit
- Як запустити паралельно широкомасштабне виконання тестів на аппіумі