JUnit Test Cases @Before @BeforeClass Annotation

Съдържание:

Anonim

JUnit е най-популярната рамка за тестване на единици в Java. Изрично се препоръчва за единично тестване. JUnit не изисква сървър за тестване на уеб приложение, което прави процеса на тестване бърз.

JUnit рамката също така позволява бързо и лесно генериране на тестови случаи и тестови данни. Пакетът org.Junit се състои от много интерфейси и класове за JUnit тестване като Test, Assert, After, Before и т.н.

Какво е тестово приспособление

Преди да разберем какво е тестово устройство, нека изучим кода по-долу

Този код е предназначен за изпълнение на два тестови случая върху обикновен файл.

публичен клас OutputFileTest {изход за частен файл;изход = нов файл (...);output.delete ();public void testFile1 () {// Код за проверка на тестов случай 1}output.delete ();изход = нов файл (...);public void testFile2 () {// Код за проверка на тестов случай 2}output.delete ();}

Няколко въпроса тук

  • Кодът не се чете
  • Кодът не е лесен за поддръжка.
  • Когато тестовият пакет е сложен, кодът може да съдържа логически проблеми.

Сравнете същия код, използвайки JUnit

публичен клас OutputFileTest{изход за частен файл;@ Преди публична невалид createOutputFile (){изход = нов файл (...);}@After public void deleteOutputFile (){output.delete ();}@Test public void testFile1 (){// код за цел на тестовия случай}@Test public void testFile2 (){// код за цел на тестовия случай}}

Кодът е много по-четлив и поддържаем. Горната кодова структура е тестово устройство.

Тестовото устройство е контекст, в който се изпълнява тестово дело. Обикновено тестовите тела включват:

  • Обекти или ресурси, които са на разположение за всеки тестов случай.
  • Необходими дейности, които правят тези обекти / ресурси достъпни.
  • Тези дейности са
    1. разпределение ( настройка )
    2. де-разпределение ( прекъсване ).

Настройка и прекъсване

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

Тези пояснения са обсъдени по-долу -

Настройвам

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

Teardown (независимо от присъдата)

@ След анотирането се използва метод, съдържащ Java код, който да се изпълнява след всеки тест. Тези методи ще се изпълняват, дори ако в тестовия случай или в случай на неуспех на твърдение се появят изключения.

Забележка:

  • Позволено е да има произволен брой анотации, изброени по-горе.
  • Всички методи, анотирани с @Before, ще се изпълняват преди всеки тест, но те могат да работят в произволен ред.
  • Можете да наследите методите @Before и @After от супер клас, Изпълнението е както следва: Това е стандартен процес на изпълнение в JUnit.
  1. Изпълнете методите @Before в суперкласа
  2. Изпълнете методите @Before в този клас
  3. Изпълнете метод @Test в този клас
  4. Изпълнете методите @After в този клас
  5. Изпълнете методите @After в суперкласа

Пример: Създаване на клас с файл като тестово устройство

публичен клас OutputFileTest{изход за частен файл;@ Преди публична невалид createOutputFile (){изход = нов файл (...);}@After public void deleteOutputFile (){output.delete ();}@Test public void testFile1 (){// код за цел на тестовия случай}@Test public void testFile2 (){// код за цел на тестовия случай}}

В горния пример веригата на изпълнение ще бъде както следва -

  1. createOutputFile ()
  2. testFile1 ()
  3. deleteOutputFile ()
  4. createOutputFile ()
  5. testFile2 ()
  6. deleteOutputFile ()

Предположение: testFile1 () работи преди testFile2 () - което не е гарантирано.

Веднъж само настройка

  • Възможно е да стартирате метод само веднъж за целия клас на теста, преди да се изпълни някой от тестовете, и преди който и да е метод (и) @Before .
  • „Веднъж само настройка“ са полезни за стартиране на сървъри, отваряне на комуникации и др. Отнема много време за затваряне и повторно отваряне на ресурси за всеки тест.
  • Това може да се направи с помощта на анотацията @BeforeClass
@BeforeClass public static void Method_Name () {// код за настройка на класа тук}

Веднъж само събори

  • Подобно на настройката само веднъж, също се предлага метод за почистване веднъж. Изпълнява се след като са изпълнени всички методи на тестови случаи и @After анотации.
  • Полезен е за спиране на сървъри, затваряне на комуникационни връзки и т.н.
  • Това може да стане с помощта на анотацията @AfterClass
@AfterClass public static void Method_Name (){// код за почистване на класа тук}

JUnit Test Suites

Ако искаме да изпълним множество тестове в определен ред, това може да стане чрез комбиниране на всички тестове на едно място. Това място се нарича тестови апартаменти. Повече подробности за това как да изпълнявате тестови пакети и как се използва в JUnit ще бъдат разгледани в този урок.

Junit Test Runner

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

  • За изпълнение на тези тестове се използва клас JUnitCore .
  • Метод, наречен runClasses, предоставен от org.junit.runner.JUnitCore, се използва за стартиране на един или няколко тестови класа.
  • Типът на връщане на този метод е обектът Result ( org.junit.runner.Result ), който се използва за достъп до информация за тестовете. Вижте следния пример за код за повече яснота.
тест за публичен клас {публична статична void main (String [] args) {Резултат от резултата = JUnitCore.runClasses (CreateAndSetName.class);за (Неуспех при неуспех: result.getFailures ()) {System.out.println (failure.toString ());}System.out.println (result.wasSuccessful ());}}

В горния код обектът "резултат" се обработва, за да получи неуспехи и успешни резултати от тестови случаи, които изпълняваме.

Първа програма JUnit

Справедливите познания за SDLC, Java програмирането и основите на процеса на тестване на софтуер помагат за разбирането на програмата JUnit.

Нека разберем Unit Testing, използвайки жив пример. Трябва да създадем тестов клас с тестов метод, отбелязан с @Test, както е дадено по-долу:

MyFirstClassTest.java

пакет guru99.JUnit;импортиране на статичен org.JUnit.Assert. *;внос org.JUnit.Test;публичен клас MyFirstClassTest {@Тестpublic void myFirstMethod () {String str = "JUnit работи добре";assertEquals ("JUnit работи добре", str);}}

TestRunner.java

За да изпълним нашия тестов метод (по-горе), трябва да създадем тестов бегач. В тестовия бегач трябва да добавим тестов клас като параметър в метода на runclasses () на JUnitCore. Той ще върне резултата от теста въз основа на това дали тестът е преминат или не.

За повече подробности вижте кода по-долу:

пакет guru99.JUnit;внос org.JUnit.runner.JUnitCore;внос org.JUnit.runner.Result;внос org.JUnit.runner.notification.Failure;публичен клас TestRunner {публична статична void main (String [] args) {Резултат от резултата = JUnitCore.runClasses (MyFirstClassTest.class);за (Неуспех при неуспех: result.getFailures ()) {System.out.println (failure.toString ());}System.out.println ("Резултат ==" + result.wasSuccessful ());}}

Изход

След като TestRunner.java изпълни нашите тестови методи, ние получаваме изход като неуспешен или предаден. Моля, намерете по-долу обяснение за изхода:

  1. В този пример, след изпълнение на MyFirstClassTest.java , тестът е предаден и резултатът е в зелено.
  2. Ако би се провалило, трябваше да покаже резултата като червен и отказ може да се наблюдава при проследяване на отказ. Вижте по-долу JUnit gui:

Резюме :

  • JUnit е рамка, която поддържа няколко анотации за идентифициране на метод, който съдържа тест.
  • JUnit предоставя анотация, наречена @Test, която казва на JUnit, че публичният void метод, в който се използва, може да се изпълни като тестов случай.
  • Тестовото устройство е контекст, в който се изпълнява тестовия случай
  • За да се изпълнят множество тестове в определен ред, това може да се направи чрез комбиниране на всички тестове на едно място. Това място се нарича тестови апартаменти.
  • JUnit предоставя инструмент за изпълнение на тестовете, където можем да стартираме нашите тестови случаи, посочени като Test Runner.