JUnit Підручник з анотацій із прикладом: що таке @Test і @After
Що таке JUnit Анотації?
JUnit Анотації це спеціальна форма синтаксичних метаданих, до яких можна додати Java вихідний код для кращої читабельності та структури коду. Змінні, параметри, пакети, методи та класи можуть бути анотовані. Анотації були представлені в Junit4, що робить Java код більш читабельний і простий. Це велика різниця між Junit3 і Junit4, що Junit4 базується на анотаціях.
Знаючи анотації в Junit5, можна легко вивчити та реалізувати a JUnit тест. Нижче наведено важливі та часто використовувані JUnit список анотацій:
S.No. | Анотації | Опис |
---|---|---|
1. | @Тест | Ця анотація є заміною org.junit.TestCase, яка вказує на те, що публічний метод void, до якого вона приєднана, може бути виконаний як тестовий приклад. |
2. | @Раніше | Ця анотація використовується, якщо ви хочете виконати певний оператор, наприклад передумови, перед кожним тестом. |
3. | @BeforeClass | Ця анотація використовується, якщо ви хочете виконати деякі оператори перед тим, як усі тестові випадки для, наприклад, тестового з’єднання мають бути виконані перед усіма тестовими випадками. |
4. | @Після | Цю анотацію можна використовувати, якщо ви хочете виконати деякі оператори після кожного Тестовий випадок наприклад, скидання змінних, видалення тимчасових файлів, змінних тощо. |
5. | @Після занять | Цю анотацію можна використати, якщо ви хочете виконати деякі оператори після всіх тестів, наприклад, Вивільнення ресурсів після виконання всіх тестів. |
6. | @Ігнорує | Цю анотацію можна використовувати, якщо ви хочете проігнорувати деякі оператори під час виконання тесту, наприклад, вимкнути деякі тестові випадки під час виконання тесту. |
7. | @Test(timeout=500) | Цю анотацію можна використати, якщо ви хочете встановити час очікування під час виконання тесту, наприклад, якщо ви працюєте згідно з певним SLA (угодою про рівень обслуговування), і тести мають бути завершені протягом визначеного часу. |
8. | @Test(expected=IllegalArgumentException.class) | Цю анотацію можна використовувати, якщо ви хочете обробити деякі винятки під час виконання тесту. Наприклад, якщо ви хочете перевірити, чи викидає певний метод вказаний виняток чи ні. |
JUnit Приклад анотацій
Давайте створимо клас, який охоплює важливі JUnit анотації за допомогою простих інструкцій друку та виконайте їх за допомогою класу виконання тестів:
Крок 1) Розглянемо нижче клас Java, який має різні методи, які додаються до наведених вище анотацій:
JunitAnnotationsExample.java
package guru99.junit; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import java.util.ArrayList; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; public class JunitAnnotationsExample { private ArrayList<String> list; @BeforeClass public static void m1() { System.out.println("Using @BeforeClass , executed before all test cases "); } @Before public void m2() { list = new ArrayList<String>(); System.out.println("Using @Before annotations ,executed before each test cases "); } @AfterClass public static void m3() { System.out.println("Using @AfterClass ,executed after all test cases"); } @After public void m4() { list.clear(); System.out.println("Using @After ,executed after each test cases"); } @Test public void m5() { list.add("test"); assertFalse(list.isEmpty()); assertEquals(1, list.size()); } @Ignore public void m6() { System.out.println("Using @Ignore , this execution is ignored"); } @Test(timeout = 10) public void m7() { System.out.println("Using @Test(timeout),it can be used to enforce timeout in JUnit4 test case"); } @Test(expected = NoSuchMethodException.class) public void m8() { System.out.println("Using @Test(expected) ,it will check for specified exception during its execution"); } }
Крок 2) давайте створимо клас запуску тестів для виконання вищевказаного тесту:
TestRunner.java
package guru99.junit; import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; public class TestRunner { public static void main(String[] args) { Result result = JUnitCore.runClasses(JunitAnnotationsExample.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println("Result=="+result.wasSuccessful()); } }
Очікуваний результат
- Усі тестові випадки виконуватимуться один за одним, і всі оператори друку можна побачити на консолі.
- Як зазначено в таблиці вище @Перед анотацією в JUnit, @BeforeClass [ метод m1() і m2() ] буде виконано перед кожним і перед усіма тестами відповідно.
- Таким же чином @After in JUnit, @afterClass (метод m3() і m4()) буде виконано після кожного та після всіх тестів відповідно. @ignore (метод m6()) розглядатиметься як ігнорування тесту.
Давайте детально проаналізуємо тестові випадки, використані у вищезгаданому класі Java:
- Розглянемо метод m5(), як наведено нижче:
@Test public void m5() { list.add("test"); assertFalse(list.isEmpty()); assertEquals(1, list.size()); }
У наведеному вище методі ви додаєте рядок у змінну «список».
- list.isEmpty() поверне false.
- assertFalse(list.isEmpty()) має повернути істину.
- У результаті тестовий приклад буде проходити.
Оскільки ви додали лише один рядок до списку, тому розмір один.
- list.size() має повертати int значення як «1».
- So assertEquals(1, list.size()) має повернути істину.
- У результаті тестовий приклад буде проходити.
- Розглянемо метод m7(), як наведено нижче:
@Test(timeout = 10) public void m7() { System.out.println("Using @Test(timeout),it can be used to enforce timeout in JUnit4 test case"); }
Як обговорювалося вище @Test(час очікування = 10)анотація використовується для забезпечення тайм-ауту в тестовому випадку.
- Розглянемо метод m8(), як наведено нижче:
@Test(expected = NoSuchMethodException.class) public void m8() { System.out.println("Using @Test(expected) ,it will check for specified exception during its execution"); }
Як обговорювалося вище @Test(очікується) перевірятиме наявність зазначеного винятку під час його виконання, тому метод m8() викине «No Such Method Exception». У результаті тест буде виконано з винятком.
Оскільки всі тестові випадки пройдено, це призводить до успішного виконання тесту.
Фактичний результат
Оскільки у наведеному вище прикладі є три тести, усі тести виконуватимуться по одному. Див. результат нижче:
Нижче наведені заяви для друку, які можна побачити на консолі:
Використання @BeforeClass, виконується перед усіма тестами
Використання анотацій @Before, які виконуються перед кожним тестом
Використання @After, виконується після кожного тесту
Використання анотацій @Before, які виконуються перед кожним тестом
Використовуючи @Test(timeout), його можна використати для примусового встановлення часу очікування JUnit4 тестовий приклад
Використання @After, виконується після кожного тесту
Використання анотацій @Before, які виконуються перед кожним тестом
Використовуючи @Test(expected), він перевірятиме наявність вказаного винятку під час виконання
Використання @After, виконується після кожного тесту
Використання @AfterClass, виконується після всіх тестів
JUnit Стверджувати клас
Цей клас надає низку методів твердження, корисних для написання тесту. Якщо всі оператори assert прийнято, результати тесту успішні. Якщо будь-який оператор 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 Тестові випадки Клас
Для запуску кількох тестів доступний клас TestCase org.junit.TestCase пакети. Анотація @Test розповідає JUnit що цей загальнодоступний метод void (Test Case тут), до якого він прикріплений, можна запустити як тестовий приклад.
У таблиці нижче показано деякі важливі методи, доступні в org.junit.TestCase клас:
S.No. | Метод | Опис |
---|---|---|
1. | int countTestCases() | Цей метод використовується для підрахунку кількості виконаних тестів запустити (TestResult tr) метод. |
2. | TestResult createResult() | Цей метод використовується для створення a Результати тесту об'єкт |
3. | Рядок getName() | Цей метод повертає рядок, який є нічим іншим, як a Тестовий випадок. |
4. | TestResult run() | Цей метод використовується для виконання тесту, який повертає a Результати тесту об'єкт |
5. | недійсний запуск (результат TestResult) | Цей метод використовується для виконання тесту з a Результати тесту об'єкт, який нічого не повертає. |
6. | void setName(ім'я рядка) | Цей метод використовується для встановлення імені a TestCase. |
7. | void setUp() | Цей метод використовується для написання коду асоціації ресурсу. Наприклад, створити підключення до бази даних. |
8. | void tearDown() | Цей метод використовується для написання коду випуску ресурсу. Наприклад, розблокувати з’єднання з базою даних після виконання транзакції. |
JUnit Клас 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 Клас набору тестів
Якщо ви хочете виконати кілька тестів у визначеному порядку, це можна зробити, об’єднавши всі тести в одному місці. Це місце називається наборами тестів.
Дивіться таблицю нижче для важливих методів, які використовуються в org.junit.TestSuite клас:
S.No. | Метод | Опис |
---|---|---|
1. | void addTest (Тестовий тест) | Цей метод використовується, якщо ви хочете додати тест до набору. |
2. | void addTestSuite(Клас testClass) | Цей метод використовується, якщо ви хочете вказати клас під час додавання тесту до набору. |
3. | int countTestCases() | Цей метод використовується, якщо потрібно підрахувати кількість тестів. |
4. | Рядок getName() | Цей метод використовується для отримання назви набору тестів. |
5. | недійсний запуск (результат TestResult) | Цей метод використовується для виконання тесту та збору результатів тесту Результати тесту об'єкт |
6. | void setName(ім'я рядка) | Цей метод використовується для встановлення імені TestSuite. |
7. | Тест testAt(індекс int) | Цей метод використовується, якщо ви хочете повернути тест із заданим індексом. |
8. | int testCount() | Цей метод використовується, якщо ви хочете повернути кілька тестів у Suite. |
9. | попередження про статичний тест (рядкове повідомлення) | Цей метод повертає тест, який завершується невдачею, і записує попереджувальне повідомлення. |
Підсумки
- JUnit надає портативний API, який надає всі важливі класи та Selenium анотації, корисні під час написання модульного тесту.
- Класи, які дуже корисні під час написання тесту
- org.junit.Assert
- org.junit.TestCase
- org.junit.TestResult
- org.junit.TestSuite
- Важливий і часто використовуваний JUnit список анотацій@Before@BeforeClass@After
@Після занять
@Тест
@Ігнорувати