Учебное пособие по аннотациям JUnit с примером

Содержание:

Anonim

Что такое аннотации 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) Эту аннотацию можно использовать, если вы хотите установить некоторый тайм-аут во время выполнения теста, например, если вы работаете в рамках некоторого SLA (соглашение об уровне обслуживания), и тесты должны быть завершены в течение определенного определенного времени.
8. @Test (ожидается = IllegalArgumentException.class) Эту аннотацию можно использовать, если вы хотите обработать какое-то исключение во время выполнения теста. Например, если вы хотите проверить, генерирует ли конкретный метод указанное исключение или нет.

В этом руководстве вы узнаете:

  • Пример аннотаций JUnit
  • Класс JUnit Assert
  • Класс JUnit Test Cases
  • Класс JUnit TestResult
  • Класс JUnit Test Suite

Пример аннотаций JUnit

Давайте создадим класс, охватывающий важные аннотации JUnit, с простыми операторами печати и выполним его с помощью класса средства запуска тестов:

Шаг 1) Рассмотрим ниже класс java, имеющий различные методы, которые прикреплены к перечисленным выше аннотациям:

JunitAnnotationsExample.java

пакет 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 {частный список ArrayList ;@BeforeClasspublic static void m1 () {System.out.println ("Использование @BeforeClass, выполняется перед всеми тестовыми примерами");}@Передpublic void m2 () {список = новый список массивов  ();System.out.println («Использование аннотаций @Before, выполняемых перед каждым тестом»);}@После занятийpublic static void m3 () {System.out.println («Использование @AfterClass, выполняется после всех тестов»);}@Послеpublic void m4 () {list.clear ();System.out.println ("Использование @After, выполняется после каждого тестового примера");}@Тестpublic void m5 () {list.add ("тест");assertFalse (список.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;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 = JUnitCore.runClasses (JunitAnnotationsExample.class);for (Failure failure: result.getFailures ()) {System.out.println (отказ.toString ());}System.out.println ("Результат ==" + result.wasSuccessful ());}}

ожидаемый результат

  • Все тестовые примеры будут выполняться один за другим, и все операторы печати можно будет увидеть на консоли.
  • Как обсуждалось в приведенной выше таблице @Before, @BeforeClass [метод m1 () и m2 ()] будет выполняться перед каждым и перед всеми тестовыми примерами соответственно.
  • Таким же образом @ after, @ afterClass (методы m3 () и m4 ()) будут выполняться после каждого и после всех тестовых примеров соответственно. @ignore (метод m6 ()) будет рассматриваться как игнорирование теста.

Давайте подробно проанализируем тестовые случаи, используемые в приведенном выше классе java:

  1. Рассмотрим метод m5 (), как показано ниже:
@Тестpublic void m5 () {list.add ("тест");assertFalse (список.isEmpty ());assertEquals (1, list.size ());}

В приведенном выше методе, когда вы добавляете строку в переменную "список", чтобы

  • list.isEmpty () вернет false.
  • assertFalse (list.isEmpty ()) должен возвращать истину.
  • В результате тест-кейс пройдет успешно .

Поскольку вы добавили в список только одну строку, размер равен единице.

  • list.size () должен возвращать значение int как "1".
  • Итак, assertEquals (1, list.size ()) должен возвращать true.
  • В результате тест-кейс пройдет успешно .
  1. Рассмотрим метод m7 (), как показано ниже:
@Test (тайм-аут = 10)public void m7 () {System.out.println ("Используя @Test (тайм-аут), он может использоваться для принудительного тайм-аута в тестовом примере JUnit4");}

Как обсуждалось выше, аннотация @Test (timeout = 10) используется для обеспечения тайм-аута в тестовом примере.

  1. Рассмотрим метод 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 пройдены, результаты теста успешны. Если какой-либо оператор assert завершится неудачно, результаты теста не будут получены.

Как вы видели ранее, в таблице ниже описаны важные методы и описание Assert:

S.No. Методика Описание
1. void assertEquals (ожидаемое логическое значение, фактическое логическое значение) Он проверяет, равны ли два значения, аналогично методу equals класса Object
2. void assertFalse (логическое условие) функциональность заключается в проверке ложности условия.
3. void assertNotNull (объект-объект) Функциональность «assertNotNull» - проверить, не является ли объект нулевым.
4. void assertNull (объект-объект) Функциональность «assertNull» заключается в проверке того, что объект имеет значение NULL.
5. void assertTrue (логическое условие) Функциональность «assertTrue» заключается в проверке выполнения условия.
6. недействительный сбой () Если вы хотите выдать какую-либо ошибку утверждения, у вас есть 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. void run (результат TestResult) Этот метод используется для выполнения теста с объектом TestResult, который ничего не возвращает.
6. void setName (имя строки) Этот метод используется для установки имени TestCase.
7. недействительным setUp () Этот метод используется для написания кода ассоциации ресурсов. например, создать соединение с базой данных.
8. пустота tearDown () Этот метод используется для написания кода выпуска ресурсов. например, Освободить соединение с базой данных после выполнения транзакции.

Класс JUnit TestResult

Когда вы выполняете тест, он возвращает результат (в виде объекта TestResult ). Этот объект TestResult можно использовать для анализа полученного объекта. Этот результат теста может быть неудачным или успешным. В таблице ниже приведены важные методы, используемые в классе org.junit.TestResult:
S.No. Методика Описание
1. void addError (Test test, Throwable t) Этот метод используется, если вам требуется добавить в тест ошибку.
2. void addFailure (Тестовый тест, AssertionFailedError t) Этот метод используется, если требуется добавить отказ в список отказов.
3. void endTest (Тестовый тест) Этот метод используется для уведомления о том, что тест выполнен (завершен)
4. int errorCount () Этот метод используется для получения ошибки, обнаруженной во время выполнения теста.
5. Перечисление ошибок () Этот метод просто возвращает коллекцию (здесь перечисление) ошибок.
6. int failureCount () Этот метод используется для подсчета ошибок, обнаруженных во время выполнения теста.
7. void run (тест TestCase) Этот метод используется для выполнения тестового примера.
8. интервал runCount () Этот метод просто считает выполненный тест.
9. void startTest (Тестовый тест) Этот метод используется для уведомления о запуске теста.
10. недействительная остановка () Этот метод используется для остановки тестового запуска.

Класс JUnit Test Suite

Если вы хотите выполнить несколько тестов в указанном порядке, это можно сделать, объединив все тесты в одном месте. Это место называется тестовыми наборами.

В таблице ниже приведены важные методы, используемые в классе org.junit.TestSuite :

S.No. Методика Описание
1. void addTest (Тестовый тест) Этот метод используется, если вы хотите добавить тест в набор.
2. void addTestSuite (Класс testClass) Этот метод используется, если вы хотите указать класс при добавлении теста в набор.
3. int countTestCases () Этот метод используется, если вы хотите подсчитать количество тестовых случаев.
4. Строка getName () Этот метод используется для получения имени набора тестов.
5. void run (результат TestResult) Этот метод используется для выполнения теста и сбора результатов теста в объекте TestResult .
6. void setName (имя строки) Этот метод используется для установки имени TestSuite .
7. Тест testAt (индекс int) Этот метод используется, если вы хотите вернуть тест по заданному индексу.
8. int testCount () Этот метод используется, если вы хотите вернуть несколько тестов в Suite.
9. предупреждение о статическом тесте (строковое сообщение) Этот метод возвращает тест, который завершится ошибкой, и записывает предупреждающее сообщение.

Резюме:

  • JUnit предоставляет переносимый API, который предоставляет все важные классы и аннотации, полезные при написании модульного теста.
  • Классы, которые очень полезны при написании тестового примера
    • org.junit.Assert
    • org.junit.TestCase
    • org.junit.TestResult
    • org.junit.TestSuite
  • список важных и часто используемых аннотаций

    @Перед

    @BeforeClass

    @После

    @После занятий

    @Тест

    @ Игнорировать