JUnit Анотація тестових випадків @Before @BeforeClass
JUnit є найпопулярнішою одиницею Тестування каркас в Java. Це однозначно рекомендовано для Unit Testing. JUnit не потребує сервера для тестування веб-додатку, що робить процес тестування швидким.
JUnit фреймворк також дозволяє швидко та легко створювати тестові випадки та тестові дані. The org.Junit пакет складається з багатьох інтерфейсів і класів для JUnit Тестування, наприклад Test, Assert, After, Before тощо.
Що таке тестовий прилад
Перш ніж зрозуміти, що таке тестовий прилад, давайте вивчимо наведений нижче код
Цей код призначений для виконання двох тестів на простому файлі.
public class OutputFileTest { private File output; output = new File(...); output.delete(); public void testFile1(){ //Code to verify Test Case 1 } output.delete(); output = new File(...); public void testFile2(){ //Code to verify Test Case 2 } output.delete(); }
Тут кілька питань
- Код не читається
- Код непросто підтримувати.
- Якщо набір тестів складний, код може містити логічні проблеми.
Порівняйте той самий код за допомогою JUnit
public class OutputFileTest { private File output; @Before public void createOutputFile() { output = new File(...); } @After public void deleteOutputFile() { output.delete(); } @Test public void testFile1() { // code for test case objective } @Test public void testFile2() { // code for test case objective } }
Код набагато легший для читання та підтримки. Наведена вище структура коду є a Тестовий прилад.
Тестовий прилад – це контекст, де a JUnit Тестовий випадок біжить. Як правило, тестові прилади включають:
- Об’єкти або ресурси, доступні для будь-якого тесту.
- Необхідні дії, які роблять ці об’єкти/ресурси доступними.
- Ці заходи є
- розподіл (установка)
- де-розподіл (розрив).
Налаштування та демонтаж
- Зазвичай є кілька повторюваних завдань, які необхідно виконати перед кожним тестом. приклад: створити підключення до бази даних.
- Так само в кінці кожного тесту можуть бути повторювані завдання. приклад: щоб очистити після завершення виконання тесту.
- JUnit надає анотації, які допомагають у налаштуванні та демонтажі. Це гарантує, що ресурси вивільняються, а тестова система знаходиться в стані готовності до наступного тесту.
Ці JUnit анотації обговорюються нижче-
Setup
@Раніше анотація в JUnit використовується в методі, що містить Java код для запуску перед кожним тестом. тобто він запускається перед кожним виконанням тесту.
Розбирання (незалежно від вироку)
@Після анотація використовується для методу, що містить код Java для запуску після кожного тесту. Ці методи працюватимуть, навіть якщо в тестовому прикладі створено будь-які винятки або у випадку помилок твердження.
Примітка:
- Дозволено мати будь-яку кількість анотацій, перелічених вище.
- Усі методи, анотовані с @Раніше in JUnit виконуватимуться перед кожним тестом, але вони можуть виконуватися в будь-якому порядку.
- Ви можете успадкувати методи @Before та @After із суперкласу. Виконання виглядає так: це стандартний процес виконання в JUnit.
- Виконайте JUnit Методи @Before у суперкласі
- Виконайте методи @Before у цьому класі
- Виконайте метод @Test у цьому класі
- Виконайте методи @After у цьому класі
- Виконайте методи @After у суперкласі
Приклад: створення класу з файлом як тестовим приладом
public class OutputFileTest { private File output; @Before public void createOutputFile() { output = new File(...); } @After public void deleteOutputFile() { output.delete(); } @Test public void testFile1() { // code for test case objective } @Test public void testFile2() { // code for test case objective } }
У наведеному вище прикладі ланцюжок виконання буде таким:
- createOutputFile()
- testFile1()
- deleteOutputFile()
- createOutputFile()
- testFile2()
- deleteOutputFile()
Припущення:
testFile1() виконується перед testFile2()– що не гарантується.
Одноразове налаштування
- Метод можна запустити лише один раз для всього тестового класу перед виконанням будь-якого з тестів і перед будь-яким @Раніше метод(и).
- «Тільки одноразове налаштування» корисне для запуску серверів, відкриття зв’язків тощо. Закриття та повторне відкриття ресурсів для кожного тесту займає багато часу.
- Це можна зробити за допомогою анотації @BeforeClass in JUnit.
@BeforeClass public static void Method_Name() { // class setup code here }
Один раз знести
- Подібно до одноразового налаштування, також доступний метод одноразового очищення. Він виконується після всіх методів тестових випадків і @Після виконано анотації.
- Це корисно для зупинки серверів, закриття каналів зв'язку тощо.
- Це можна зробити за допомогою @Після занять анотації
@AfterClass public static void Method_Name() { // class cleanup code here }
JUnit Набори тестів
Якщо ми хочемо виконати кілька тестів у визначеному порядку, це можна зробити, об’єднавши всі тести в одному місці. Це місце називається наборами тестів. Докладніше про те, як виконувати набори тестів і як вони використовуються в JUnit буде розглянуто в цьому підручник.
Junit Test Runner
JUnit надає інструмент для виконання ваших тестів.
- JUnitCore клас використовується для виконання цих тестів.
- Метод під назвою runClasses надаються org.junit.runner.JUnitЯдро, використовується для запуску одного або кількох тестових класів.
- Тип повернення цього методу - Результат об'єкт (org.junit.runner.Result), який використовується для доступу до інформації про тести. Дивіться наступний приклад коду для більшої ясності.
public class Test { public static void main(String[] args) { Result result = JUnitCore.runClasses(CreateAndSetName.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println(result.wasSuccessful()); } }
У наведеному вище коді об’єкт «результат» обробляється для отримання помилок і успішних результатів тестів, які ми виконуємо.
Ім’я JUnit більшість квитків вже розпродано!
Добре знання SDLC, програмування на Java та основ тестування програмного забезпечення процес допомагає зрозуміти JUnit програми.
Давайте розберемося в модульному тестуванні на живому прикладі. Нам потрібно створити тестовий клас із тестовим методом, анотованим @Тест як зазначено нижче:
MyFirstClassTest.java
package guru99.JUnit; import static org.JUnit.Assert.*; import org.JUnit.Test; public class MyFirstClassTest { @Test public void myFirstMethod(){ String str= "JUnit is working fine"; assertEquals("JUnit is working fine",str); } }
TestRunner.java
Щоб виконати наш тестовий метод (вище), нам потрібно створити програму для виконання тестів. У програмі виконання тестів ми повинні додати тестовий клас як параметр JUnitМетод runclasses() Core. Він поверне результат тесту залежно від того, пройдено чи не пройдено тест.
Щоб отримати докладніші відомості про це, перегляньте код нижче:
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(MyFirstClassTest.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println("Result=="+result.wasSuccessful()); } }
Вихід
один раз TestRunner.java виконує наші методи тестування, ми отримуємо результат як невдалий або пройдений. Нижче наведено пояснення вихідних даних:
- У цьому прикладі після виконання MyFirstClassTest.java , тест пройдено, результат буде зеленим.
- Якби він вийшов з ладу, він мав би показати результат як червоний, і збій можна спостерігати в трасі збою. Дивись нижче JUnit gui:
Підсумки
- JUnit це структура, яка підтримує кілька анотацій для визначення методу, який містить тест.
- JUnit надає анотацію під назвою @Тест, який розповідає JUnit що відкритий метод void, у якому він використовується, може працювати як тестовий приклад.
- Тестовий пристрій — це контекст, у якому запускається тестовий приклад
- Щоб виконати кілька тестів у визначеному порядку, це можна зробити, об’єднавши всі тести в одному місці. Це місце називається наборами тестів.
- JUnit надає інструмент для виконання тестів, де ми можемо запускати наші тестові випадки, які називаються Test Runner.