JUnit — самая популярная среда модульного тестирования в Java. Это явно рекомендуется для модульного тестирования . JUnit не требует сервера для тестирования веб-приложения, что ускоряет процесс тестирования.
Инфраструктура JUnit также позволяет быстро и легко генерировать тестовые случаи и тестовые данные. Пакет 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 } }
Код гораздо удобнее для чтения и сопровождения. Приведенная выше структура кода является тестовым приспособлением.
Тестовое устройство — это контекст, в котором запускается Test Case . Как правило, тестовые приборы включают в себя:
- Объекты или ресурсы, доступные для любого теста.
- Требуются действия, которые делают эти объекты / ресурсы доступными.
- Эти мероприятия
- распределение ( настройка )
- де-распределение ( демонтаж ).
Установка и Разрушение
- Обычно есть несколько повторяющихся задач, которые необходимо выполнить перед каждым тестовым примером. Пример: создать соединение с базой данных.
- Аналогичным образом, в конце каждого теста может быть несколько повторяющихся задач. Пример: очистить после завершения теста.
- JUnit предоставляет аннотации, которые помогают в настройке и демонтаже. Это гарантирует, что ресурсы высвобождаются, и тестовая система находится в состоянии готовности для следующего контрольного примера.
Эти аннотации обсуждаются ниже
Настроить
Аннотация @Before используется для метода, содержащего код Java, для запуска перед каждым тестовым примером. т.е. он запускается перед каждым выполнением теста.
Снос (независимо от вердикта)
@After аннотация используется для метода, содержащего Java-код, для запуска после каждого теста. Эти методы будут запускаться, даже если в тестовом примере или в случае ошибок подтверждений возникнут какие-либо исключения.
Замечания:
- Разрешено иметь любое количество аннотаций, перечисленных выше.
- Все методы, помеченные @Before, будут выполняться перед каждым тестовым примером, но они могут выполняться в любом порядке.
- Вы можете наследовать методы @Before и @After от суперкласса. Выполнение выглядит следующим образом: Это стандартный процесс выполнения в 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 () — что не гарантируется.
Единовременная настройка
- Можно выполнить метод только один раз для всего класса теста перед выполнением любого из тестов и перед любым методом @Before .
- «Настройка только один раз» полезна для запуска серверов, открытия связи и т. Д. Закрытие и повторное открытие ресурсов для каждого теста занимает много времени.
- Это можно сделать с помощью аннотации @BeforeClass
@BeforeClass public static void Method_Name() { // class setup code here }
Только один раз снести
- Как и в случае однократной настройки, доступен также метод однократной очистки. Он запускается после выполнения всех методов тестового примера и аннотаций @After .
- Это полезно для остановки серверов, закрытия каналов связи и т. Д.
- Это можно сделать с помощью аннотации @AfterClass
@AfterClass public static void Method_Name() { // class cleanup code here }
JUnit Test Suites
Если мы хотим выполнить несколько тестов в указанном порядке, это можно сделать, объединив все тесты в одном месте. Это место называется тестовыми наборами. Более подробная информация о том, как выполнить наборы тестов и как он используется в JUnit, будет рассмотрена в этом руководстве .
Junit Test Runner
JUnit предоставляет инструмент для выполнения ваших тестовых случаев.
- Класс JUnitCore используется для выполнения этих тестов.
- Метод runClasses, предоставляемый org.junit.runner.JUnitCore, используется для запуска одного или нескольких тестовых классов.
- Тип возврата этого метода — объект Result ( 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.
Давайте разберемся с модульным тестированием на живом примере. Нам нужно создать тестовый класс с тестовым методом, аннотированным @Test, как указано ниже:
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
Чтобы выполнить наш тестовый метод (см. Выше), нам нужно создать тестового бегуна. В тестовом средстве мы должны добавить тестовый класс в качестве параметра в методе runclasses () JUnitCore. Он вернет результат теста в зависимости от того, пройден тест или нет.
Подробнее об этом см. Код ниже:
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 предоставляет аннотацию под названием @Test, которая сообщает JUnit, что открытый метод void, в котором он используется, может быть запущен в качестве контрольного примера.
- Тестовое устройство — это контекст, в котором выполняется тестовый пример
- Чтобы выполнить несколько тестов в указанном порядке, это можно сделать, объединив все тесты в одном месте. Это место называется тестовыми наборами.
- JUnit предоставляет инструмент для выполнения тестов, где мы можем запускать наши тесты, называемые Test Runner.