JUnit Тестовые случаи @Before @BeforeClass Аннотация

⚡ Умное резюме

JUnit является наиболее широко используемой средой для модульного тестирования. JavaА аннотации тестовых фикстур точно контролируют, что происходит до и после выполнения каждого тестового метода внутри тестового класса.

  • 🔘 Крепеж: Тестовая среда — это фиксированный контекст объектов и ресурсов, в котором выполняется тестовый пример.
  • ☑️ Настроить: Аннотация `@Before` выполняется перед каждым тестовым методом, а `@BeforeClass` — один раз перед всем классом.
  • ✅ Срывать: Аннотация `@After` выполняется после каждого теста, даже если тест выдает исключение или утверждение не выполняется.
  • 🧪 Порядок: Сначала выполняется аннотация @Before суперкласса, затем @Before подкласса, аннотация @Test, а затем каждая аннотация @After.
  • 🇧🇷 Второе место: JUnitМетод Core.runClasses() выполняет тестовые классы и возвращает объект Result, содержащий все ошибки.
  • 📊 JUnit 5: @Before, @After, @BeforeClass и @AfterClass преобразуются в @BeforeEach, @AfterEach, @BeforeAll и @AfterAll.

JUnit Тестовый набор с аннотациями @Before и @BeforeClass

JUnit это самая популярная единица Тестирование рамки в Java. Это явно рекомендуется для Модульное тестирование. JUnit Для тестирования веб-приложения не требуется сервер, что значительно ускоряет процесс тестирования.

JUnit Framework также позволяет быстро и легко создавать тестовые примеры и тестовые данные. org.junit Этот пакет состоит из множества интерфейсов и классов для JUnit Тестирование, такое как Test, Assert, After и Before. Более широкое JUnit Семья строится на тех же самых строительных блоках.

Что такое испытательное приспособление?

Прежде чем понять, что такое тестовая среда, давайте изучим приведенный ниже код.

Этот код предназначен для выполнения двух тестовых случаев в простом файле.

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
    }
}

Код стал намного более читаемым и удобным для сопровождения. Приведенная выше структура кода представляет собой приспособление для испытаний.

Тестовое приспособление — это контекст, в котором JUnit Тестовый кейс бежит. Обычно испытательные приспособления включают в себя:

  • Объекты или ресурсы, доступные для любого тестового примера.
  • Необходимые действия, обеспечивающие доступ к этим объектам и ресурсам.
  • Эти мероприятия
    1. распределение (установка)
    2. дераспределение (демонтаж).

Настройка и разборка

Матчи имеют значение, потому что JUnit Эти механизмы запускают проверку каждого теста.

  • Обычно перед каждым тестовым примером необходимо выполнить несколько повторяющихся задач. Пример: создать соединение с базой данных.
  • Аналогично, в конце каждого тестового примера могут быть повторяющиеся задачи. Пример: для очистки после завершения выполнения теста.
  • JUnit Предоставляет аннотации, которые помогают при настройке и завершении работы системы. Это гарантирует освобождение ресурсов и готовность тестовой системы к следующему тестовому случаю.

Эти JUnit Аннотации обсуждаются ниже.

Установка

@Перед аннотация в JUnit используется в методе, содержащем Java код, который выполняется перед каждым тестовым случаем, то есть он выполняется перед каждым выполнением теста.

Снос (независимо от приговора)

@После аннотация используется в методе, содержащем Java код для запуска после каждого тестового примера. Эти методы будут выполняться, даже если в тестовом примере или в случае сбоя утверждения возникают какие-либо исключения.

Примечание:

  • Допускается иметь любое количество аннотаций, перечисленных выше.
  • Все методы, аннотированные @Перед in JUnit будут выполняться перед каждым тестовым примером, но они могут выполняться в любом порядке.
  • Вы можете наследовать методы `@Before` и `@After` от суперкласса. Выполнение происходит следующим образом, и это стандартный процесс выполнения. JUnit.
  1. Выполнить JUnit @Before методы в суперклассе
  2. Выполните методы @Before в этом классе.
  3. Выполните метод @Test в этом классе
  4. Выполните методы @After в этом классе.
  5. Выполните методы @After в суперклассе

JUnit Примечание 5 года: эти аннотации JUnit 4 (org.junit). JUnit 5 переименовали их в org.junit.jupiter.api, и JUnit Код 4, приведенный ниже, по-прежнему работает на старом двигателе.

JUnit Аннотация 4 г. JUnit 5 (эквивалент Юпитера) Работает
@Перед @BeforeEach Перед каждым методом тестирования
@После @ПослеКаждого После каждого метода тестирования
@BeforeClass @BeforeAll Один раз перед всем классом
@После занятий @После всего Один раз после всего класса
@ Игнорировать @Неполноценный Пропускает аннотированный тест

Пример: Создание класса с использованием файла в качестве тестового инструмента.

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
    }
}

В приведенном выше примере цепочка выполнения будет выглядеть следующим образом. Диаграмма tracЭто один цикл создания-тестирования-удаления на каждый метод тестирования.

JUnit Цепочка выполнения @Before и @After вокруг двух тестовых методов

  1. создатьВыходнойФайл()
  2. тестФайл1()
  3. удалитьВыходнойФайл()
  4. создатьВыходнойФайл()
  5. тестФайл2()
  6. удалитьВыходнойФайл()

Предположение:

Функция testFile1() выполняется раньше функции testFile2(), что не гарантируется.

Однократная установка

  • Можно запустить метод только один раз для всего тестового класса перед выполнением любого из тестов и перед любым @Перед метод (ы).
  • «Одноразовая настройка» полезна для запуска серверов, установления связи и подобных задач. Закрытие и повторное открытие ресурсов для каждого теста занимает много времени.
  • Это можно сделать с помощью аннотации @BeforeClass in JUnit.
@BeforeClass public static void Method_Name() {	
    // class setup code here	
 }	

Метод должен быть публичная статическая пустота, потому как JUnit Вызывает эту функцию до того, как будет создан какой-либо тестовый экземпляр.

Снести только один раз

  • Аналогично однократной настройке, доступен также однократный метод очистки. Он выполняется после всех методов тестовых случаев и @После аннотации выполнены.
  • Это полезно для остановкиping серверы и замыкание каналов связи.
  • Это можно сделать с помощью @После занятий аннотаций.
 @AfterClass public static void Method_Name()	
 {	
    // class cleanup code here	
 }	

JUnit Наборы тестов

После настройки тестовых условий, связанные тестовые классы обычно группируются и запускаются одновременно.

Если нам нужно выполнить несколько тестов в заданном порядке, это можно сделать, объединив все тесты в одном месте. Это место называется набором тестов. Более подробная информация о том, как выполнять наборы тестов и как они используются, приведена в [ссылка на документацию]. JUnit рассматриваются в этом учебник.

JUnit Тестовый бегун

JUnit предоставляет инструмент для выполнения ваших тестовых случаев.

  • JUnitОсновные class используется для выполнения этих тестов.
  • Метод под названием runClasses предоставляемые org.junit.runner.JUnitОсновные используется для запуска одного или нескольких тестовых классов.
  • Тип возвращаемого значения этого метода — Результат объект (org.junit.runner.Результат), который используется для доступа к информации о тестах. Для большей ясности см. следующий пример кода.
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());					
   }		
}      

В приведенном выше коде объект «result» обрабатывается для получения результатов выполнения тестовых случаев, как неудачных, так и успешных. Вспомогательные функции, такие как... Утвердитьравно поднимать эти вопросы, касающиеся неудач, в то время как @ Игнорировать Пропускает тест.

JUnit Примечание 5 года: JUnitОсновные это JUnit 4 бегуна. JUnit 5 заменяет его на JUnit Платформа гранатомет API, обычно запускаемый IDE, Gradle или Maven Surefire.

Имя 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()` ядра. Он вернет результат теста в зависимости от того, пройден он или нет.

Более подробную информацию можно найти в приведенном ниже коде:

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 При выполнении наших тестовых методов мы получаем результат «пройдено» или «не пройдено». Ниже приведено пояснение к результату:

  1. В этом примере после выполнения MyFirstClassTest.javaТест пройден, и результат отображается зеленым цветом.
  2. Если бы произошла ошибка, результат отобразился бы красным цветом, и ошибку можно было бы наблюдать по её появлению. tracе. См. JUnit Ниже представлен графический интерфейс пользователя:

Eclipse JUnit На изображении показана зеленая полоса проходного балла для MyFirstClassTest.

Часто задаваемые вопросы (FAQ)

JUnit Создает новый экземпляр тестового класса для каждого тестового метода, поэтому экземпляр не существует, когда должен выполняться код на уровне класса. Объявление метода статическим позволяет JUnit Вызовите его напрямую.

Нет. Порядок выполнения методов намеренно не указан. JUnit 4 предложения @FixMethodOrder и JUnit 5 предлагает @TestMethodOrder, но в зависимости от порядка это указывает на связанные тесты.

Метод тестирования никогда не вызывается и сообщается как ошибка, а не как сбой. Любой метод с аннотацией @After всё равно выполняется, поэтому при очистке необходимо учитывать частично сформированный фикстурный файл.

В новые проекты следует добавить следующее JUnit 5 агрегированных артефактов org.junit.jupiter:junit-jupiter. Команды, хранящие устаревшие файлы. JUnit 4 пакета программ добавляют junit-vintage-engine, поэтому оба работают на одной платформе.

Фикстор — это вся подготовленная среда вокруг теста, включая реальные файлы или соединения. Моковица — это один заменяющий объект с запрограммированным поведением, часто создаваемым с помощью фикстора.

Да, через @BeforeClass в JUnit 4 или @BeforeAll в JUnit 5. Общие фикстуры работают быстрее, но приводят к утечке состояния, поэтому их следует использовать только для дорогостоящих ресурсов, доступных только для чтения.

Искусственный интеллект-ассистенты считывают класс, определяют необходимые для него элементы взаимодействия и создают конфигурацию @Before с соответствующей очисткой с помощью @After. Всегда проверяйте сгенерированные утверждения самостоятельно.

Второй пилот GitHub Создает тестовый класс на основе сигнатуры метода, включая аннотации жизненного цикла. Часто используется значение по умолчанию. JUnit 4 импортных товара, поэтому убедитесь, что комплект соответствует вашему двигателю.

Подведем итог этой публикации следующим образом: