JUnit Учебное пособие по аннотациям с примером: что такое @Test и @After
⚡ Умное резюме
JUnit Аннотации — это форма синтаксических метаданных, добавляемых к Java Исходный код, чтобы средство запуска тестов знало, какие методы выполнять, когда их запускать и сколько времени может занять каждый из них.
Что такое JUnit Аннотации?
JUnit аннотации представляют собой особую форму синтаксических метаданных, которые можно добавить к Java Исходный код для лучшей читаемости и структуры кода. Переменные, параметры, пакеты, методы и классы могут быть аннотированы. Аннотации были введены в JUnit 4, что делает Java Код становится более читабельным и простым. В этом и заключается главное отличие. JUnit 3 и JUnit 4: JUnit 4 основан на аннотациях.
Обладая практическими знаниями этих аннотаций, можно легко изучить и внедрить... JUnit тест. Ниже приведены важные и часто используемые JUnit список аннотаций, с JUnit Рядом с каждым из них находится 5 эквивалентов (Юпитер):
| S.No. | Аннотации | Описание | JUnit 5 эквивалентов |
|---|---|---|---|
| 1. | @Контрольная работа | Эта аннотация заменяет аннотацию `junit.framework.TestCase` и указывает, что открытый метод `void`, к которому она прикреплена, может быть выполнен в качестве тестового случая. | @Test (org.junit.jupiter.api) |
| 2. | @Перед | Эта аннотация используется, если вы хотите выполнить какой-либо оператор, например предварительные условия, перед каждым тестовым примером. | @BeforeEach |
| 3. | @BeforeClass | Эта аннотация используется, если вы хотите выполнить какие-либо операторы перед всеми тестовыми случаями, например, тестовое соединение, которое должно быть открыто перед всеми тестовыми случаями. | @BeforeAll |
| 4. | @После | Эту аннотацию можно использовать, если вы хотите выполнить несколько операторов после каждого Тестовый кейснапример, сброс переменных или удаление временных файлов. | @ПослеКаждого |
| 5. | @После занятий | Эта аннотация может использоваться, если вы хотите выполнить определенные операторы после всех тестовых случаев, например, освободить ресурсы после выполнения всех тестовых случаев. | @После всего |
| 6. | @ Игнорировать | Эта аннотация может использоваться, если вы хотите игнорировать некоторые операторы во время выполнения тестов, например, отключать некоторые тестовые случаи во время выполнения тестов. | @Неполноценный |
| 7. | @Тест (время ожидания = 500) | Эта аннотация может использоваться, если вы хотите установить тайм-аут во время выполнения тестов, например, если вы работаете в рамках соглашения об уровне обслуживания (SLA) и тесты должны быть завершены в течение указанного времени. | @Timeout или assertTimeout |
| 8. | @Test(ожидается=IllegalArgumentException.class) | Эта аннотация может использоваться, если вы хотите обработать какое-либо исключение во время выполнения теста. Например, если вы хотите проверить, генерирует ли конкретный метод указанное исключение или нет. | assertThrows |
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()); } }
ожидаемый результат
- Все тестовые случаи будут выполняться по очереди, и все сообщения для вывода будут отображаться в консоли.
- Как указано в таблице выше, @Before и @BeforeClass в JUnit Методы m2() и m1() будут выполняться перед каждым тестовым случаем и перед всеми тестовыми случаями соответственно.
- Аналогичным образом @After и @AfterClass в JUnit Методы m4() и m3() будут выполняться после каждого тестового случая и после всех тестовых случаев соответственно. Аннотация @Ignore (метод m6()) будет рассматриваться как игнорирование теста.
Давайте проанализируем тестовые примеры, использованные выше. Java класс подробно:
- Рассмотрим метод m5(), представленный ниже:
@Test
public void m5() {
list.add("test");
assertFalse(list.isEmpty());
assertEquals(1, list.size());
}
В описанном выше методе вы добавляете строку в переменную «list»:
- список.isEmpty() вернет false.
- AssertFalse(list.isEmpty()) должен возвращать истину.
- В результате тестовый пример будет pass.
Поскольку вы добавили в список только одну строку, его размер равен единице.
- список.размер() Должен возвращать целочисленное значение «1».
- So AssertEquals(1, list.size()) должен возвращать истину.
- В результате тестовый пример будет pass.
- Рассмотрим метод 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) Используется для установки тайм-аута в тестовом случае. Значение указывается в миллисекундах, поэтому функция m7() должна завершиться в течение 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». В результате тест будет выполнен с исключением.
Примечание о точности: Функция m8() только выводит строку, поэтому объявленное исключение фактически никогда не выбрасывается. JUnit 4 сообщает о неудачной проверке. Сопоставьте ожидаемый тип с тем, что на самом деле выдает метод. JUnit 5 пишет это с assertThrows.
Поскольку все тестовые случаи пройдены, это приводит к успешному выполнению теста.
Фактический результат
Поскольку в приведенном выше примере три тестовых случая, все тестовые случаи будут выполняться по очереди. См. скриншот консоли ниже:

См. ниже операторы печати, которые можно увидеть на консоли:
Использование @BeforeClass, выполняемое перед всеми тестовыми примерами.
Использование аннотаций @Before, выполняемых перед каждым тестовым примером.
Использование @After, выполняемого после каждого тестового примера
Использование аннотаций @Before, выполняемых перед каждым тестовым примером.
Используя @Test(timeout), его можно использовать для обеспечения тайм-аута в JUnit4 тестовых примера
Использование @After, выполняемого после каждого тестового примера
Использование аннотаций @Before, выполняемых перед каждым тестовым примером.
Используя @Test(expected), он проверит наличие указанного исключения во время выполнения.
Использование @After, выполняемого после каждого тестового примера
Использование @AfterClass, выполняемого после всех тестовых случаев
JUnit Утверждать класс
Аннотации определяют, когда выполняется метод; методы assert определяют, проходит ли он проверку.
Этот класс предоставляет набор методов проверки утверждений, полезных при написании тестовых случаев. Если все утверждения пройдены успешно, результаты теста считаются успешными. Если хотя бы одно утверждение не пройдено, результаты теста считаются неудачными. Этот класс предоставляет множество методов проверки утверждений, полезных при написании тестовых случаев. JUnit утверждать В этом руководстве подробно рассматривается каждый метод.
Как вы уже видели ранее, в таблице ниже описаны важные методы 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 Класс тестовых примеров
Для запуска нескольких тестов доступен класс TestCase. junit.framework пакет. Аннотация @Test указывает JUnit что этот публичный метод void (здесь представлен тестовый пример), к которому он прикреплен, может быть запущен в качестве тестового примера.
Примечание к версии: Прецедент, Результат испытаний и Тестирование принадлежать наследию junit.framework пакет от JUnit 3. Они по-прежнему поставляются в составе артефакта junit 4.x, но тесты на основе аннотаций не расширяют TestCase.
В таблице ниже представлены некоторые важные методы, доступные в junit.framework.TestCase учебный класс:
| S.No. | Способ доставки | Описание |
|---|---|---|
| 1. | int countTestCases() | Этот метод используется для подсчета количества выполненных тестовых случаев. запустить (TestResult tr) метод. |
| 2. | Результат теста createResult() | Этот метод используется для создания Результат испытаний объект. |
| 3. | Строка getName () | Этот метод возвращает строку, которая представляет собой не что иное, как Прецедент имя. |
| 4. | ТестРезультат запуска() | Этот метод используется для выполнения теста, который возвращает результат. Результат испытаний объект. |
| 5. | void run (результат TestResult) | Этот метод используется для выполнения теста, имеющего Результат испытаний объект, который ничего не возвращает. |
| 6. | void setName (имя строки) | Этот метод используется для задания имени Прецедент. |
| 7. | недействительный набор() | Этот метод используется для написания кода, связывающего ресурсы, например, для создания подключения к базе данных. |
| 8. | недействительный разрыв() | Этот метод используется для написания кода освобождения ресурсов, например, для освобождения соединения с базой данных после выполнения транзакционной операции. |
JUnit Класс ТестРезультат
При выполнении теста возвращается результат (в виде Результат испытаний Объект TestResult можно использовать для анализа результирующего объекта. Результатом теста может быть либо неудача, либо успех.
В таблице ниже перечислены важные методы, используемые в классе junit.framework.TestResult:
| S.No. | Способ доставки | Описание |
|---|---|---|
| 1. | void addError (Тестовый тест, Throwable t) | Этот метод используется, если вам необходимо добавить ошибку в тест. |
| 2. | void addFailure (Тестовый тест, AssertionFailedError t) | Этот метод используется, если необходимо добавить ошибку в список ошибок. |
| 3. | void endTest (Тестовый тест) | Этот метод используется для уведомления о том, что тест выполнен (завершен). |
| 4. | int errorCount() | Этот метод используется для получения информации об ошибках, обнаруженных во время выполнения тестов. |
| 5. | Перечисление ошибки() | Этот метод просто возвращает коллекцию (в данном случае перечисление) ошибок. |
| 6. | интервал неудачиCount() | Этот метод используется для получения количества ошибок, обнаруженных во время выполнения теста. |
| 7. | void run (тест TestCase) | Этот метод используется для выполнения тестового примера. |
| 8. | интервал runCount() | Этот метод просто подсчитывает количество выполненных тестов. |
| 9. | void startTest (Тестовый тест) | Этот метод используется для уведомления о запуске теста. |
| 10. | недействительная остановка() | Этот метод используется для остановки выполнения теста. |
JUnit Класс тестового набора
Если вы хотите выполнить несколько тестов в указанном порядке, это можно сделать, объединив все тесты в одном месте. Это место называется набором тестов, и JUnit тестирование В обучающем видео подробно разбирается полный пример.
В таблице ниже приведены важные методы, используемые в junit.framework.TestSuite учебный класс:
| S.No. | Способ доставки | Описание |
|---|---|---|
| 1. | void addTest (Тестовый тест) | Этот метод используется, если вы хотите добавить тест в комплект. |
| 2. | void addTestSuite (Класс тесткласс) | Этот метод используется, если вы хотите указать класс при добавлении теста в набор. |
| 3. | int countTestCases() | Этот метод используется, если вы хотите подсчитать количество тестовых случаев. |
| 4. | Строка getName () | Этот метод используется для получения имени набора тестов. |
| 5. | void run (результат TestResult) | Этот метод используется для выполнения теста и сбора результатов теста в Результат испытаний объект. |
| 6. | void setName (имя строки) | Этот метод используется для задания имени Тестирование. |
| 7. | Тест testAt(int index) | Этот метод используется, если вам нужно вернуть результат теста по заданному индексу. |
| 8. | int testCount() | Этот метод используется, если вам нужно вернуть количество тестов в наборе. |
| 9. | статическое тестовое предупреждение (строковое сообщение) | Этот метод возвращает тест, который завершится неудачно, и зарегистрирует предупреждающее сообщение. |
