Що таке анотації JUnit?
JUNIT ANNOTATIONS - це спеціальна форма синтаксичних метаданих, яка може бути додана до вихідного коду Java для кращої читабельності та структури коду. Змінні, параметри, пакети, методи та класи можуть бути анотовані. Анотації були введені в Junit4, що робить код Java більш читабельним і простим. У цьому полягає велика різниця між Junit3 та Junit4 у тому, що Junit4 базується на анотаціях.
Знаючи анотації в Junit5, можна легко вивчити та реалізувати тест JUnit. Нижче наведено список важливих і часто використовуваних анотацій:
S.No. | Анотації | Опис |
---|---|---|
1. | @ Тест | Ця анотація є заміною org.junit.TestCase, яка вказує на те, що публічний метод void, до якого він приєднаний, може бути виконаний як тестовий випадок. |
2. | @ Перед тим | Ця анотація використовується, якщо ви хочете виконати певний оператор, наприклад, передумови перед кожним тестовим випадком. |
3. | @BeforeClass | Ця анотація використовується, якщо ви хочете виконати деякі оператори перед тим, як усі тестові випадки, наприклад, тестове з'єднання, повинні бути виконані перед усіма тестовими кейсами. |
4. | @Після | Цю анотацію можна використовувати, якщо ви хочете виконати деякі оператори після кожного тестування, наприклад, для скидання змінних, видалення тимчасових файлів, змінних тощо. |
5. | @Після занять | Цю анотацію можна використовувати, якщо ви хочете виконати деякі оператори після всіх тестових випадків, наприклад, звільнити ресурси після виконання всіх тестових випадків. |
6. | @ Ігнорує | Цю анотацію можна використовувати, якщо ви хочете ігнорувати деякі оператори під час виконання тесту, наприклад, відключивши деякі тестові випадки під час виконання тесту. |
7. | @Test (час очікування = 500) | Цю анотацію можна використовувати, якщо ви хочете встановити деякий тайм-аут під час виконання тесту, наприклад, якщо ви працюєте за якоюсь угодою про рівень обслуговування (угода про рівень обслуговування), і тести повинні бути завершені протягом певного часу. |
8. | @Test (очікується = IllegalArgumentException.class) | Цю анотацію можна використовувати, якщо ви хочете обробити якийсь виняток під час виконання тесту. Наприклад, якщо ви хочете перевірити, кидає певний метод заданий виняток чи ні. |
У цьому підручнику ви дізнаєтесь-
- Приклад анотацій JUnit
- Клас JUnit Assert
- Клас JUnit Test Cases
- Клас JUnit TestResult
- Клас JUnit Test Suite
Приклад анотацій JUnit
Давайте створимо клас, що охоплює важливі анотації JUnit простими операторами друку та виконуємо його за допомогою тестового класу бігуна:
Крок 1) Розглянемо нижче клас Java, який має різні методи, які приєднуються до вищезазначених анотацій:
JunitAnnotationsExample.java
пакет guru99.junit;імпортувати статичний org.junit.Assert.assertEquals;імпортувати статичний org.junit.Assert.assertFalse;імпортувати java.util.ArrayList;імпорт org.junit.After;імпорт org.junit.AfterClass;імпорт org.junit.Before;імпорт org.junit.BeforeClass;імпорт org.junit.Ignore;імпорт org.junit.Test;публічний клас JunitAnnotationsExample {приватний список ArrayList;@BeforeClassвідкрита статична порожнеча m1 () {System.out.println ("Використання @BeforeClass, виконане перед усіма тестовими кейсами");}@ Перед тимpublic void m2 () {list = new ArrayList ();System.out.println ("Використання анотацій @Before, що виконуються перед кожним тестом");}@Після занятьпублічна статична порожнеча m3 () {System.out.println ("Використання @AfterClass, що виконується після всіх тестів");}@Післяpublic void m4 () {list.clear ();System.out.println ("Використання @After, виконується після кожного тестування");}@ Тестpublic void m5 () {list.add ("тест");assertFalse (list.isEmpty ());assertEquals (1, list.size ());}@ Ігноруватиpublic void m6 () {System.out.println ("За допомогою @Ignore це виконання ігнорується");}@Test (таймаут = 10)public void m7 () {System.out.println ("Використовуючи @Test (тайм-аут), його можна використати для примушення часу очікування в тестовому випадку JUnit4");}@Test (очікується = NoSuchMethodException.class)public void m8 () {System.out.println ("Використовуючи @Test (очікується), він перевірить наявність визначеного винятку під час його виконання");}}
Крок 2) давайте створимо клас тестового бігуна для виконання вищезазначеного тесту:
TestRunner.java
пакет guru99.junit;імпорт org.junit.runner.JUnitCore;імпорт org.junit.runner.Result;імпорт org.junit.runner.notification.Failure;публічний клас TestRunner {public static void main (String [] args) {Результат результату = JUnitCore.runClasses (JunitAnnotationsExample.class);for (Помилка помилки: result.getFailures ()) {System.out.println (failure.toString ());}System.out.println ("Результат ==" + result.wasSuccessful ());}}
Очікуваний результат
- Усі тестові кейси будуть виконуватися по одному, а всі оператори друку можна побачити на консолі.
- Як обговорювалось у наведеній вище таблиці @Before, @BeforeClass [метод m1 () та m2 ()] буде виконаний перед кожним та перед усіма тестовими кейсами відповідно.
- Таким же чином @ after, @ afterClass (метод m3 () та m4 ()) буде виконано відповідно після кожного та після всіх тестових випадків. @ignore (метод m6 ()) буде сприйнято як ігнорування тесту.
Давайте детально проаналізуємо тестові приклади, використані у вищезазначеному класі Java:
- Розглянемо метод m5 (), як наведено нижче:
@ Тестpublic void m5 () {list.add ("тест");assertFalse (list.isEmpty ());assertEquals (1, list.size ());}
У наведеному вище методі, коли ви додаєте рядок у змінну "list", так
- list.isEmpty () поверне значення false.
- assertFalse (list.isEmpty ()) має повернути true.
- Як результат, тест пройде .
Оскільки ви додали лише один рядок до списку, то і розмір один.
- list.size () повинен повертати значення int як "1".
- Тож assertEquals (1, list.size ()) повинен повертати true.
- Як результат, тест пройде .
- Розглянемо метод m7 (), як наведено нижче:
@Test (таймаут = 10)public void m7 () {System.out.println ("Використовуючи @Test (тайм-аут), його можна використати для примушення часу очікування в тестовому випадку JUnit4");}
Як вже обговорювалося вище, анотація @Test (timeout = 10) використовується для примушення часу очікування в тестовому випадку.
- Розглянемо метод m8 (), як наведено нижче:
@Test (очікується = NoSuchMethodException.class)public void m8 () {System.out.println ("Використовуючи @Test (очікується), він перевірить наявність визначеного винятку під час його виконання");}
Як вже обговорювалося вище, @Test (очікуваний) перевірятиме вказаний виняток під час його виконання, тому метод m8 () видасть "Немає такого винятку методу". Як результат, тест буде виконаний за винятком.
Оскільки всі тестові випадки проходять, це призводить до успішного виконання тесту.
Фактичний результат
Оскільки у наведеному прикладі є три тестові кейси, усі тестові кейси будуть виконуватися по одному. Див. Вихідні дані нижче :
Нижче наведено відомості про друк, які можна побачити на консолі:
Використання @BeforeClass, виконане перед усіма тестовими кейсами
Використання анотацій @Before, що виконуються перед кожним тестом
Використання @After, виконується після кожного тестування
Використання анотацій @Before, що виконуються перед кожним тестом
Використовуючи @Test (тайм-аут), він може бути використаний для забезпечення тайм-ауту в тестовому випадку JUnit4
Використання @After, виконується після кожного тестування
Використання анотацій @Before, що виконуються перед кожним тестом
Використовуючи @Test (очікувано), він перевірить наявність винятків під час його виконання
Використання @After, виконується після кожного тестування
Використовуючи @AfterClass, виконується після всіх тестів
Клас JUnit Assert
Цей клас пропонує купу методів твердження, корисних для написання тестового прикладу. Якщо всі твердження затверджено, результати тестування є успішними. Якщо будь-яке твердження не вдається, результати тесту не вдаються.
Як ви вже бачили раніше, нижче таблиця описує важливі методи та опис Assert:
S.No. | Метод | Опис |
---|---|---|
1. | void assertEquals (логічне значення очікуване, логічне фактичне) | Він перевіряє, чи рівні два значення, подібні до методу equals класу Object |
2. | void assertFalse (логічний стан) | функціональність полягає у перевірці хибності умови. |
3. | void assertNotNull (об'єкт об'єкта) | Функція "assertNotNull" полягає в тому, щоб перевірити, чи не є об'єкт нульовим. |
4. | void assertNull (об'єкт об'єкта) | Функція "assertNull" полягає в тому, щоб перевірити, чи є об'єкт нульовим. |
5. | void assertTrue (логічний стан) | Функціональність "assertTrue" полягає у перевірці істинності умови. |
6. | void fail () | Якщо ви хочете викинути будь-яку помилку твердження, у вас є fail (), що завжди призводить до вироку про помилку. |
7. | void assertSame ([рядкове повідомлення] | Функція "assertSame" полягає в тому, щоб перевірити, чи відповідають два об'єкти одному об'єкту. |
8. | void assertNotSame ([рядкове повідомлення] | Функція "assertNotSame" полягає в тому, щоб перевірити, що два об'єкти не посилаються на один і той же об'єкт. |
Клас JUnit Test Cases
Для запуску декількох тестів клас TestCase доступний у пакетах org.junit.TestCase . Анотація @Test повідомляє JUnit, що цей публічний метод void (Тестовий випадок тут), до якого він приєднаний, може бути запущений як тестовий кейс.
Нижче в таблиці показані деякі важливі методи, доступні в класі org.junit.TestCase :
S.No. | Метод | Опис |
---|---|---|
1. | int countTestCases () | Цей метод використовується для підрахунку кількості тестових випадків, виконаних методом run (TestResult tr) . |
2. | TestResult createResult () | Цей метод використовується для створення об’єкта TestResult . |
3. | Рядок getName () | Цей метод повертає рядок, який є не чим іншим, як TestCase . |
4. | TestResult run () | Цей метод використовується для виконання тесту , який повертає TestResult об'єкта |
5. | порожній запуск (результат TestResult) | Цей метод використовується для виконання тесту, що має об’єкт TestResult, який нічого не повертає. |
6. | void setName (ім'я рядка) | Цей метод використовується для встановлення імені TestCase. |
7. | void setUp () | Цей метод використовується для написання коду асоціації ресурсів. наприклад, створити підключення до бази даних. |
8. | void tearDown () | Цей метод використовується для написання коду випуску ресурсу. наприклад, звільнити підключення до бази даних після виконання операції транзакції. |
Клас JUnit TestResult
Коли ви виконуєте тест, він повертає результат (у вигляді об'єкта TestResult ). Цей об'єкт TestResult можна використовувати для аналізу результуючого об'єкта. Цей результат тесту може бути як невдалим, так і успішним. Див. Таблицю нижче для важливих методів, що використовуються в класі org.junit.TestResult:S.No. | Метод | Опис |
---|---|---|
1. | void addError (Тестовий тест, Throwable t) | Цей метод використовується, якщо вам потрібно додати помилку до тесту. |
2. | void addFailure (Тестовий тест, AssertionFailedError t) | Цей метод використовується, якщо вам потрібно додати збій до списку відмов. |
3. | void endTest (Тестовий тест) | Цей метод використовується для повідомлення про те, що тест виконаний (завершений) |
4. | int errorCount () | Цей метод використовується для виявлення помилки під час виконання тесту. |
5. | Помилки перерахування | Цей метод просто повертає набір (перелік тут) помилок. |
6. | int failureCount () | Цей метод використовується для отримання підрахунку помилок, виявлених під час виконання тесту. |
7. | порожній запуск (тест TestCase) | Цей метод використовується для виконання тесту. |
8. | int runCount () | Цей метод просто враховує виконаний тест. |
9. | void startTest (Тестовий тест) | Цей метод використовується для повідомлення про тестування. |
10. | порожня зупинка () | Цей метод використовується для тестового запуску, який потрібно зупинити. |
Клас JUnit Test Suite
Якщо ви хочете виконати кілька тестів у визначеному порядку, це можна зробити, об’єднавши всі тести в одному місці. Це місце називається тестовим набором.
У таблиці нижче наведено важливі методи, що використовуються в класі org.junit.TestSuite :
S.No. | Метод | Опис |
---|---|---|
1. | void addTest (тестовий тест) | Цей метод використовується, якщо ви хочете додати тест до набору. |
2. | void addTestSuite (клас extends TestCase> testClass) | Цей метод використовується, якщо ви хочете вказати клас під час додавання тесту до набору. |
3. | int countTestCases () | Цей метод використовується, якщо потрібно підрахувати кількість тестів. |
4. | Рядок getName () | Цей метод використовується для отримання набору тестового набору. |
5. | порожній запуск (результат TestResult) | Цей метод використовується для виконання тесту та збору результату тесту в об'єкті TestResult . |
6. | void setName (ім'я рядка) | Цей метод використовується для встановлення імені TestSuite . |
7. | Тест testAt (індекс int) | Цей метод використовується, якщо ви хочете повернути тест за заданим індексом. |
8. | int testCount () | Цей метод використовується, якщо ви хочете повернути ряд тестів у наборі. |
9. | попередження про статичний тест (рядкове повідомлення) | Цей метод повертає тест, який не вдасться, і зафіксує попереджувальне повідомлення. |
Короткий зміст:
- JUnit надає портативний API, який надає всі важливі класи та анотації, корисні для написання модульного тесту.
- Класи, які дуже корисні при написанні тестового кейсу
- org.junit.Assert
- org.junit.TestCase
- org.junit.TestResult
- org.junit.TestSuite
- список важливих та часто використовуваних анотацій
@ Перед тим
@BeforeClass
@Після
@Після занять
@ Тест
@ Ігнорувати