Учебники

3) JUnit Test Framework

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 . Как правило, тестовые приборы включают в себя:

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

Установка и Разрушение

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

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

Настроить

Аннотация @Before используется для метода, содержащего код Java, для запуска перед каждым тестовым примером. т.е. он запускается перед каждым выполнением теста.

Снос (независимо от вердикта)

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

Замечания:

  • Разрешено иметь любое количество аннотаций, перечисленных выше.
  • Все методы, помеченные @Before, будут выполняться перед каждым тестовым примером, но они могут выполняться в любом порядке.
  • Вы можете наследовать методы @Before и @After от суперкласса. Выполнение выглядит следующим образом: Это стандартный процесс выполнения в JUnit.
  1. Выполните методы @Before в суперклассе
  2. Выполните методы @Before в этом классе
  3. Выполните метод @Test в этом классе
  4. Выполните методы @After в этом классе
  5. Выполните методы @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
    }
}

В приведенном выше примере цепочка выполнения будет выглядеть следующим образом:

JUnit Test framework

  1. createOutputFile ()
  2. testFile1 ()
  3. deleteOutputFile ()
  4. createOutputFile ()
  5. testFile2 ()
  6. 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 выполнит наши тестовые методы, мы получим вывод как неудачный или пройденный. Пожалуйста, найдите объяснение ниже:

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

JUnit Test framework

Резюме :

  • JUnit — это фреймворк, который поддерживает несколько аннотаций для определения метода, который содержит тест.
  • JUnit предоставляет аннотацию под названием @Test, которая сообщает JUnit, что открытый метод void, в котором он используется, может быть запущен в качестве контрольного примера.
  • Тестовое устройство — это контекст, в котором выполняется тестовый пример
  • Чтобы выполнить несколько тестов в указанном порядке, это можно сделать, объединив все тесты в одном месте. Это место называется тестовыми наборами.
  • JUnit предоставляет инструмент для выполнения тестов, где мы можем запускать наши тесты, называемые Test Runner.