junit test suite filtering test cases
У цьому підручнику буде розглянуто те, що таке JUnit Test Suite, як створити тестовий пакет та як відфільтрувати тестові випадки в JUnit 4 проти JUnit 5:
Про те, як пропустити певні тестові випадки під час виконання, ми дізналися в нашому попередньому уроці. Ми також дізналися про різні анотації, що використовуються в JUnit 4 та JUnit 5 для цього.
У цьому підручнику ми дізнаємось:
- Що таке тестовий пакет?
- Як нам створити набір тестів, об’єднавши кілька тестових кейсів у групу та виконавши набір за допомогою класу JUnitCore?
=> Завітайте сюди, щоб ознайомитись із ексклюзивними навчальними посібниками JUnit.
Що ви дізнаєтесь:
JUnit Test Suite
JUnit 4: @RunWith, Анотації @SuiteClasses
Підручник Кілька способів виконання тестів JUnit проілюстровано, як створити набір тестів у JUnit 4.
Анотації @RunWith і @SuiteClasses допоміг нам створити набір тестів, згрупувавши кілька тестових класів JUnit. Згодом файл-виконавець із класом JUnitCore.runclasses () викликав виконання створеного набору тестів.
Будь ласка, зверніться до згаданого розділу, щоб отримати детальну інформацію про робочий процес разом із фактичним кодом для JUnit 4.
JUnit 5: @RunWith, @SelectClasses, @SelectPackages Анотації
Створення тестового набору в ТОП 5 цілком схоже на те, що ми маємо в JUnit 4. Отже, де тоді різниця?
# 1) В JUnit 4 , ми маємо Suite.class, який передається як параметр до анотації @RunWith для підтримки створення тестового набору, тоді як ТОП 5 використовує ту ж анотацію @RunWith, але з вхідним параметром, що і JUnitPlatform.class замість Люкс. Клас .
Отже, рядок коду в JUnit 5 виглядає так @RunWith (JUnitPlatform.class). Це анотація, яка постачається разом із вашим підпроектом JUnit Platform.
# два) В JUnit 4 , ми використовуємо @SuiteClasses щоб згрупувати кілька класів JUnit, розділених комою, перебуваючи в ТОП 5 ми маємо:
- Анотація @SelectClasses що еквівалентно @SuiteClasses в JUnit 4 для групування декількох класів JUnit.
- @SelectPackages анотація використовується для групування декількох тестів із пакету (пакетів). Вам потрібно ввести значення масиву рядка, яке представляє пакет, який ви хочете включити.
Таким чином, іншими словами,
- Якщо ви хочете згрупувати тестові кейси з одного пакету, JUnit 5 дозволяє вам це зробити.
- Або у випадку, якщо ви хочете згрупувати тестові кейси з декількох пакетів, JUnit 5 підтримує і вас. Тут слід пам’ятати, що тести у всіх підпакетах згаданого пакету також за замовчуванням включаються до набору тестів.
JUnit 5: Різні сценарії / приклади
Створення набору тестів, що групує кілька тестових класів
Фрагмент коду показаний нижче:
@RunWith(JUnitPlatform.class) @SelectClasses({JUnit5TestCase1.class, JUnit5TestCase2.class }) public class JUnitTestSuite { }
Створення тестового набору для одного пакету
Фрагмент коду показаний нижче:
@RunWith(JUnitPlatform.class) @SelectPackages({“ demo.tests “}) public class JUnit5TestSuite { }
Примітка :
- Сказати демо.тести пакунок має підпакет demo.tests.subtests.
- Код @SelectPackages ({“demo.tests“}) також включатиме всі тести під підпакетом до набору тестів; за замовчуванням.
- Якби ви заявили @SelectPackages ({“demo.tests.subtests“}) , тестові кейси під підпакет demo.tests.subtests буде включено лише до набору тестів, тоді як тести з його батьківського пакету, тобто демо.тести не буде включено.
Створення тестового набору для декількох пакетів
Фрагмент коду для створення набору тестів для кілька пакетів відокремлений комою в JUnit 5 - виглядатиме так, як показано нижче:
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests”, “demo1.tests”, “demo2.tests”}) public class JUnit5TestSuite { }
Набір для фільтрації - JUnit 4 проти JUnit 5
Іноді нам потрібно відфільтрувати тестові випадки та виконати певний набір тестів відповідно до наших потреб. Наприклад, може бути набір тестів, визначених для регресійного тестування, окремий набір для модульного тестування та окремий набір тестів для тестування диму.
Нам потрібно виключити або включити тестові приклади з певних пакетів чи класів чи категорій. Фільтрування або позначення тестів з одного пакета - це єдиний варіант з JUnit4.
Порівняно з JUnit 4, JUnit 5 має гарний набір функцій, що підтримують цю потребу у фільтруванні тестових кейсів з одного пакету або з декількох пакетів та підпакетів відповідно до ваших мінливих вимог.
JUnit 4 - @Category, @IncludeCategory, @ExcludeCategory
Тестові кейси в JUnit 4 можна поділити на різні категорії. Ці категорії можна виключити або включити під час запуску тестового набору. Анотації @Category, @IncludeCategory та @ExcludeCategory підтримуються з JUnit 4.12 і вище.
Кроки високого рівня для створення фільтрів на основі категорії чи категорій:
# 1) Створіть маркерний інтерфейс, який відіграє певну роль у категорії.
# два) Помітьте тестові методи класів, які будуть включені до SuiteClasses, @ Категорія та назву категорії.
# 3) У файлі тестового набору використовуйте анотацію @IncludeCategory з назвою категорії включати тести, що належать до певної категорії.
# 4) У файлі тестового набору використовуйте анотацію @ExcludeCategory з назвою категорії для їх виключення.
# 5) Анотацію @Category можна також використовувати на рівні тесту або на рівні класу. Якщо анотація застосовується на рівні тесту, тоді цей конкретний тест отримує позначку з даною категорією, тоді як якщо анотація на рівні класу, усі тести в класі помічаються до даної категорії.
Давайте розглянемо ще деякі подробиці, щоб зрозуміти практичну реалізацію категоризації тестів та їх фільтрації для виконання:
Крок 1:
Ми почнемо зі створення a інтерфейс маркера що гратиме роль а категорія для методів випробувань. Тут ми створюємо категорію з назвою UnitTest . Код дуже простий. Зверніться до коду нижче.
Код для UnitTest.java
package demo.tests; public interface UnitTest {}
Крок 2:
Ми позначимо категорію на рівень методу випробування у класі JUnitTestCase1.java . Щоб додати тест case junitMethod1 () до категорії UnitTest, нам потрібно позначити метод тестування @Category (UnitTest.class) .
Це додає метод тестування до категорії UnitTest. Інші методи випробування (якщо такі є) не позначені категорією, якщо методи не позначені категорією.
Щоб анотація @Category працювала в нашому коді, нам потрібно імпортувати пакет org.junit.experimental.categories.Category
Фрагмент коду з JUnitTestCase1.java:
@Category(UnitTest.class) @Test public void junitMethod1(){ int Value2=9000; Assert. assertEquals (Value1, Value2); }
Як варіант, метод тестування також може належати до кількох категорій Наприклад : @Category (UnitTest.class, SmokeTest.class)
Крок 3:
Я б зараз позначив категорію на рівні класу у класі JUnitTestCase2.java . Те саме твердження, яке було додано на рівні методу тестування на попередньому кроці, буде додано і до поточного файлу класу.
Зверніть увагу, що тут ми додамо твердження на рівні класу. Завдяки цьому всі методи тестування у файлі належать до UnitTest Категорія.
Фрагмент коду з JUnitTestCase2.java:
@Category(UnitTest.class) @Test public class JUnitTestCase2 { public String stringValue='JUnit';
Крок 4:
як переглянути SWF файли на ПК -
Тепер, коли наші необхідні тестові кейси були віднесені до категорії UnitTest, ми тепер побачимо, як додати їх до набору тестів, відфільтрувавши їх на основі категорії. Ми внесемо певні зміни в код JUnitTestSuite.class щоб продемонструвати це.
- Категорії. Клас буде передано як параметр до анотації @RunWith.
- @ Suite.SuiteClasses прийме масив рядків тестових класів.
- Анотація @ Categories.IncludeCategory як параметр знадобиться UnitTest.class.
- Це твердження допоможе нам відфільтрувати весь набір і запустити лише ті тести з набору, що належать до категорії.
- Categories.class потребує пакету org.junit.experimental.categories.Categories для імпорту.
Фрагмент коду для JunitTestSuite.java
@RunWith(Categories.class) @Categories.IncludeCategory(UnitTest.class) @Suite.SuiteClasses({JUnitTestCase1.class, JUnitTestCase2.class}) public class JUnitTestSuite {
Анотація @ Categories.IncludeCategory також можна записати як @IncludeCategory. Ви також можете створити кілька інтерфейсів (категорій) і анотувати клас / методи тестування кількома категоріями, розділеними комами. Наведений нижче приклад відфільтрує тести, що належать до категорії - Категорія1 та Категорія2.
Приклад: @IncludeCategory ({Category1.class, Category2.class})
Подібні правила поєднуються @ Categories.ExcludeCategory / @ExcludeCategory виключити методи випробування під категорією або категоріями під час пробного запуску.
JUnit 5 - @IncludeTags, @ExcludeTags, @IncludePackages, @ExcludePackages, @IncludeClassNamePatterns, @ExcludeClassNamePatterns
JUnit 5 поставляється в комплекті з безліччю підходів до організації та фільтрації тестових кейсів.
JUnit 5 - @IncludeTags, @ExcludeTags
# 1) Як і в JUnit 4, є анотації @IncludeCategory та @ExcludeCategory для підтримки фільтрації тестових випадків для виконання.
# два) JUnit 5 має анотації @IncludeTags та @ExcludeTags для досягнення тієї ж мети.
# 3) JUnit 4 відноситься до тестових кейсів, які мають бути згруповані до певної категорії, тоді як JUnit 5 стосується тегування тестових кейсів певним тегом, що дозволяє фільтрувати тестові кейси для виконання.
Кроки високого рівня для створення фільтрів на основі тегів:
- Помітьте тестові методи пакетів, які будуть включені до @SelectPackages, за допомогою @Tag і визначене користувачем ім'я тегу. Один клас може мати різні теги для різних методів тестування.
- Ви також можете анотувати @Tag на рівні класу, щоб усі тести в класі були позначені тегами.
- У файлі тестового набору використовуйте анотацію @IncludeTags з назвою тегу, щоб включити тести, що належать певному тегу.
- У файлі тестового набору використовуйте анотацію @ExcludeTags з назвою тегу для виключення їх із набору тестів.
Давайте тепер детально проілюструємо, як практично реалізувати фільтрацію в JUnit 5.
Крок 1 : Ми позначаємо метод тестування в JUnit5TestCase1.java до імені тегу “Regression”
Фрагмент коду з JUnit5TestCase1.java:
@Tag(“Regression”) @Test public void junitMethod1(){
Крок 2 : Ми позначаємо метод тестування в JUnit5TestCase2.java за назвою тегу “SmokeTest”.
Фрагмент коду з JUnit5TestCase2.java:
@Tag(“SmokeTest”) @Test public void junitMethod2(){
Крок 3: Тепер, коли методи тестування позначено тегами, ми тепер оновимо JUnit5TestSuite.java, щоб додати відповідні фільтри за тегами для тестів. Наведений нижче код включає всі тести, позначені як 'Регресія', і виключає всі теги, позначені як 'SmokeTest'.
Фрагмент коду з JUnit5TestSuite.java:
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @IncludeTags(“Regression”) @ExcludeTags(“SmokeTest”) public class JUnit5TestSuite { }
JUnit 5 - @IncludePackages, @ExcludePackages
Ми вже знаємо, що коли ми передаємо ім'я пакета в @SelectPackages анотація, тести в підпакетах пакету також додаються до набору тестів.
Можуть бути певні підпакети, які ми хочемо включити до нашого тестового набору, тоді як деякі інші підпакети, які ми не хочемо або можуть не мати значення, будуть включені до нашого набору.
Цьому сприяють за допомогою анотацій @IncludePackages та @ExcludePackages у JUnit 5.
Припустимо, що у нас є пакет „demo.tests“, який має три підпакети, тобто підпакет1, підпакет2 та підпакет 3, із тестовими класами в кожному з наведених нижче пакетів.
Давайте подивимось фрагмент коду JUnit5TestSuite.java, щоб наочно уявити, як включити та виключити пакет.
Сценарій No1: Застосувати фільтр, щоб включити тестові приклади лише з підпакета1.
Наведений нижче код включає всі тести з усіх класів JUnit у пакеті demo.tests.subpackage1, однак, виключає всі тести безпосередньо під пакетом demo.test та тести під пакетом subpackage2 і subpackage3.
Фрагмент коду з JUnit5TestSuite.java:
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @IncludePackages(“demo.tests.subpackage1”) public class JUnit5TestSuite { }
Сценарій No2: Застосувати фільтр, щоб виключити тестові випадки лише з підпакета3 пакета.
Наведений нижче код виключає всі тести з класів JUnit у пакеті - demo.tests.subpackage3, однак пакет включає всі тести безпосередньо під пакетом demo.test та тести під пакетом subpackage1 і subpackage2.
Фрагмент коду з JUnit5TestSuite.java:
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @ExcludePackages(“demo.tests.subpackage3”) public class JUnit5TestSuite { }
JUnit 5 - @IncludeClassNamePatterns, @ExcludeClassNamePatterns
Якщо ви хочете включити або виключити певні класи, що відповідають певному регулярному виразу, з пакета, анотації @ IncludeClassNamePatterns і @ ВиключитиClassnamePatterns може використовуватися у файлі класу тестового набору.
Давайте тепер побачимо ілюстрацію через оновлення коду в JUnit5TestSuite.java
Сценарій No1:
Наведений нижче код включає класи, які закінчуються на 'Ctests' із пакета demo.tests
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @IncludeClassNamePatterns({'^.*CTests?$'})
Сценарій No2:
Тепер ми виключимо ті класи, які ініціювати зі ‘STest’ з пакета demo.tests
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @ExcludeClassNamePatterns({'^STest.*$'})
Сценарій No3:
Кілька регулярних виразів також можуть бути передані як критерії фільтру. У наведеному нижче коді вказані два різні регулярні вирази, розділені символом ' АБО ”Оператор. Щілинна панель | тут є оператором АБО.
найкращий спосіб конвертувати відео з YouTube у mp3
Код відфільтровує класи ініціюючий з Тест ( Тест. *) або закінчення з Тести (*. Тести?) і включає ці класи в наборі тестів, оскільки використовується анотація @IncludeClassNamePatterns.
Примітка: Якщо повністю кваліфіковане ім'я класу збігається принаймні з одним шаблоном, тоді клас буде отримано відповідно до анотації @IncludeClassNamePatterns або @ExcludeClassNamePatterns.
@RunWith (JUnitPlatform.class)
@SelectPackages ({“demo.tests“})
@IncludeClassNamePatterns (. * Тести?) $ ”)
Поширені запитання про тестові випадки фільтрації JUnit
Ось питання, яке, можливо, тривало у вас на думці вже давно.
Q # 1) Яка різниця між вимкненням / ігноруванням тесту та фільтруванням тесту? Чи не може жодна з функцій допомогти виконувати ті самі цілі, пропускаючи тестові випадки під час виконання?
Відповідь: Питання справді справжнє і на нього варто відповісти.
- За допомогою функції тестування фільтрації ви можете також виключити включати тести залежно від позначеної категорії. Тоді як, з відключенням, ви можете приймати рішення лише про виключення та не включення тестів для виконання.
- Фільтрування тестових випадків є свого роду умовно пропускаючим тестовим випадком, тоді як у випадку Ігнорованих тестів вони пропускаються без будь-яких умов.
- Інша суттєва різниця між ними полягає в тому, що коли ви запускаєте тестові кейси з тестами, анотованими @Ignore або @Disabled - ігноровані тести відображаються в результатах тесту під ПРОПУСКАНО рахувати
- Коли ви запускаєте відфільтровані тести, вони взагалі не відображаються в результаті тесту.
Висновок
У цьому підручнику ми дізналися, як відфільтрувати тести, додавши категорію / тег до тестів.
У JUnit 4 ми дізналися, що у нас є @Category, @IncludeCategory і @ExcludeCategory для фільтрації тестових випадків, тоді як JUnit 5 має @IncludeTags і @ExcludeTags, щоб зробити те саме.
Крім того, JUnit 5 має додаткові параметри фільтрації з використанням анотацій @IncludePackages, @ExcludePackages, а також анотацій для включення або виключення класів із використанням шаблонів імен класів. Тим більше ми досліджуємо; ми усвідомлюємо, що є ще багато чого для вивчення.
=> Тут слідкуйте за простими навчальними серіями JUnit.
Рекомендована література
- JUnit Ignore Test Case: JUnit 4 @Ignore Vs JUnit 5 @Disabled
- Тести JUnit: Як написати приклади тестів JUnit на прикладах
- Список анотацій JUnit: JUnit 4 проти JUnit 5
- Підручник з JUnit для початківців - що таке тестування JUnit
- Що таке тестовий пристрій JUnit: Підручник з прикладами JUnit 4
- Кілька способів виконання тестів JUnit
- Завантажте, встановіть і налаштуйте JUnit в Eclipse
- Вступ до JUnit Framework та його використання в сценарії селену - Підручник з селену No11