JUnit Учебное пособие по аннотациям с примером: что такое @Test и @After
Что такое JUnit Аннотации?
JUnit Аннотации — это особая форма синтаксических метаданных, которые можно добавлять к Java Исходный код для лучшей читаемости и структуры кода. Переменные, параметры, пакеты, методы и классы могут быть аннотированы. Аннотации были введены в Junit4, что делает Java Код более читаемый и простой. Это большая разница между Junit3 и Junit4, что Junit4 основан на аннотациях.
Зная аннотации в Junit5, можно легко изучить и реализовать JUnit тест. Ниже приведены важные и часто используемые JUnit список аннотаций:
S.No. | Аннотации | Описание |
---|---|---|
1. | @Контрольная работа | Эта аннотация является заменой org.junit.TestCase, которая указывает, что общедоступный метод void, к которому он прикреплен, может быть выполнен как тестовый пример. |
2. | @Перед | Эта аннотация используется, если вы хотите выполнить какой-либо оператор, например предварительные условия, перед каждым тестовым примером. |
3. | @BeforeClass | Эта аннотация используется, если вы хотите выполнить некоторые инструкции до того, как все тестовые примеры, например, для тестового соединения, должны выполняться перед всеми тестовыми примерами. |
4. | @После | Эту аннотацию можно использовать, если вы хотите выполнить несколько операторов после каждого Тестовый кейс например, для сброса переменных, удаления временных файлов, переменных и т. д. |
5. | @После занятий | Эту аннотацию можно использовать, если вы хотите выполнить некоторые инструкции после всех тестовых случаев, например, для освобождения ресурсов после выполнения всех тестовых случаев. |
6. | @Игнорирует | Эту аннотацию можно использовать, если вы хотите игнорировать некоторые операторы во время выполнения теста, например, для отключения некоторых тестовых случаев во время выполнения теста. |
7. | @Тест (время ожидания = 500) | Эту аннотацию можно использовать, если вы хотите установить некоторый тайм-аут во время выполнения теста, например, если вы работаете в соответствии с каким-либо SLA (соглашением об уровне обслуживания), и тесты должны быть завершены в течение определенного времени. |
8. | @Test(ожидается=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()); } }
ожидаемый результат
- Все тестовые случаи будут выполняться один за другим, и все операторы печати можно будет увидеть на консоли.
- Как обсуждалось в приведенной выше таблице аннотации @Before в 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()); }
В приведенном выше методе вы добавляете строку в переменную «список», поэтому
- список.isEmpty() вернет false.
- AssertFalse(list.isEmpty()) должен возвращать истину.
- В результате тестовый пример будет pass.
Поскольку вы добавили в список только одну строку, размер равен единице.
- список.размер() должен возвращать значение int как «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)аннотация используется для обеспечения тайм-аута в тестовом примере.
- Рассмотрим метод 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() выдаст «Нет такого исключения метода». В результате тест будет выполнен с исключением.
Поскольку все тестовые случаи пройдены, это приводит к успешному выполнению теста.
Фактический результат
Поскольку в приведенном выше примере три тестовых случая, все тестовые случаи будут выполняться один за другим. См. вывод ниже:
См. ниже операторы печати, которые можно увидеть на консоли:
Использование @BeforeClass, выполняемое перед всеми тестовыми примерами.
Использование аннотаций @Before, выполняемых перед каждым тестовым примером.
Использование @After, выполняемого после каждого тестового примера
Использование аннотаций @Before, выполняемых перед каждым тестовым примером.
Используя @Test(timeout), его можно использовать для обеспечения тайм-аута в JUnit4 тестовых примера
Использование @After, выполняемого после каждого тестового примера
Использование аннотаций @Before, выполняемых перед каждым тестовым примером.
Используя @Test(expected), он проверит наличие указанного исключения во время выполнения.
Использование @After, выполняемого после каждого тестового примера
Использование @AfterClass, выполняемого после всех тестовых случаев
JUnit Утверждать класс
Этот класс предоставляет набор методов утверждения, полезных при написании тестового примера. Если все утверждения утверждения пройдены, результаты теста успешны. Если какой-либо оператор утверждения дает сбой, результаты теста не будут признаны успешными.
Как вы видели ранее, в таблице ниже описаны важные методы и описание Assert:
S.No. | Способ доставки | Описание |
---|---|---|
1. | void AssertEquals (ожидаемое логическое значение, фактическое логическое значение) | Он проверяет, равны ли два значения, аналогично методу равенства класса Object. |
2. | void AssertFalse (логическое условие) | Функциональность заключается в проверке того, что условие является ложным. |
3. | void AssertNotNull (объект объекта) | Функциональность «assertNotNull» предназначена для проверки того, что объект не является нулевым. |
4. | void AssertNull (объект объекта) | Функциональность «assertNull» предназначена для проверки того, что объект имеет значение NULL. |
5. | void AssertTrue (логическое условие) | Функциональность «assertTrue» предназначена для проверки истинности условия. |
6. | недействительный сбой() | Если вы хотите выдать какую-либо ошибку утверждения, у вас есть метод error(), который всегда приводит к неудачному вердикту. |
7. | void AssertSame([Строковое сообщение] | Функциональность «assertSame» заключается в проверке того, что два объекта ссылаются на один и тот же объект. |
8. | void AssertNotSame([Строковое сообщение] | Функция «assertNotSame» предназначена для проверки того, что два объекта не ссылаются на один и тот же объект. |
JUnit Класс тестовых примеров
Для запуска нескольких тестов доступен класс TestCase в org.junit.TestCase пакеты. Аннотация @Test сообщает JUnit что этот общедоступный метод void (здесь тестовый пример), к которому он прикреплен, может быть запущен как тестовый пример.
В таблице ниже показаны некоторые важные методы, доступные в org.junit.TestCase учебный класс:
S.No. | Способ доставки | Описание |
---|---|---|
1. | int countTestCases() | Этот метод используется для подсчета количества тестовых случаев, выполненных запустить (TestResult tr) метод. |
2. | Результат теста createResult() | Этот метод используется для создания Результат испытаний объект. |
3. | Строка getName () | Этот метод возвращает строку, которая представляет собой не что иное, как Прецедент. |
4. | ТестРезультат запуска() | Этот метод используется для выполнения теста, который возвращает Результат испытаний объект |
5. | void run (результат TestResult) | Этот метод используется для выполнения теста, имеющего Результат испытаний объект, который ничего не возвращает. |
6. | void setName (имя строки) | Этот метод используется для установки имени Прецедент. |
7. | недействительный набор() | Этот метод используется для написания кода ассоциации ресурсов. например, создать соединение с базой данных. |
8. | недействительный разрыв() | Этот метод используется для написания кода выпуска ресурсов. например, Освободите соединение с базой данных после выполнения операции транзакции. |
JUnit Класс ТестРезультат
Когда вы выполняете тест, он возвращает результат (в виде Результат испытаний объект). Этот объект TestResult можно использовать для анализа результирующего объекта. Результат этого теста может быть как неудачным, так и успешным.
В таблице ниже приведены важные методы, используемые в классе org.junit.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 Класс тестового набора
Если вы хотите выполнить несколько тестов в указанном порядке, это можно сделать, объединив все тесты в одном месте. Это место называется тестовыми наборами.
В таблице ниже приведены важные методы, используемые в org.junit.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() | Этот метод используется, если вы хотите вернуть несколько тестов в Suite. |
9. | статическое тестовое предупреждение (строковое сообщение) | Этот метод возвращает тест, который завершится неудачно, и зарегистрирует предупреждающее сообщение. |
Резюме
- JUnit предоставляет переносимый API, который предоставляет все важные классы и Selenium аннотации, полезные при написании модульного теста.
- Классы, которые очень полезны при написании тестового примера
- org.junit.Утверждать
- org.junit.TestCase
- org.junit.TestResult
- org.junit.TestSuite
- Важный и часто используемый JUnit список аннотаций@Before@BeforeClass@After
@После занятий
@Контрольная работа
@ Игнорировать