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 (){// код за цел на тестовия случай}}
Кодът е много по-четлив и поддържаем. Горната кодова структура е тестово устройство.
Тестовото устройство е контекст, в който се изпълнява тестово дело. Обикновено тестовите тела включват:
- Обекти или ресурси, които са на разположение за всеки тестов случай.
- Необходими дейности, които правят тези обекти / ресурси достъпни.
- Тези дейности са
- разпределение ( настройка )
- де-разпределение ( прекъсване ).
Настройка и прекъсване
- Обикновено има няколко повтарящи се задачи, които трябва да бъдат изпълнени преди всеки тест. Пример: създайте връзка с база данни.
- По същия начин в края на всеки тест може да има няколко повтарящи се задачи. Пример: за почистване след приключване на тестовото изпълнение.
- JUnit предоставя пояснения, които помагат при настройката и премахването. Той гарантира, че ресурсите се освобождават и системата за тестване е в състояние за следващ тест.
Тези пояснения са обсъдени по-долу -
Настройвам
@ Преди анотацията се използва за метод, съдържащ Java код, който да се изпълнява преди всеки тестов случай. т.е. изпълнява се преди всяко изпълнение на теста.
Teardown (независимо от присъдата)
@ След анотирането се използва метод, съдържащ Java код, който да се изпълнява след всеки тест. Тези методи ще се изпълняват, дори ако в тестовия случай или в случай на неуспех на твърдение се появят изключения.
Забележка:
- Позволено е да има произволен брой анотации, изброени по-горе.
- Всички методи, анотирани с @Before, ще се изпълняват преди всеки тест, но те могат да работят в произволен ред.
- Можете да наследите методите @Before и @After от супер клас, Изпълнението е както следва: Това е стандартен процес на изпълнение в JUnit.
- Изпълнете методите @Before в суперкласа
- Изпълнете методите @Before в този клас
- Изпълнете метод @Test в този клас
- Изпълнете методите @After в този клас
- Изпълнете методите @After в суперкласа
Пример: Създаване на клас с файл като тестово устройство
публичен клас OutputFileTest{изход за частен файл;@ Преди публична невалид createOutputFile (){изход = нов файл (...);}@After public void deleteOutputFile (){output.delete ();}@Test public void testFile1 (){// код за цел на тестовия случай}@Test public void testFile2 (){// код за цел на тестовия случай}}
В горния пример веригата на изпълнение ще бъде както следва -
- createOutputFile ()
- testFile1 ()
- deleteOutputFile ()
- createOutputFile ()
- testFile2 ()
- 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 изпълни нашите тестови методи, ние получаваме изход като неуспешен или предаден. Моля, намерете по-долу обяснение за изхода:
- В този пример, след изпълнение на MyFirstClassTest.java , тестът е предаден и резултатът е в зелено.
- Ако би се провалило, трябваше да покаже резултата като червен и отказ може да се наблюдава при проследяване на отказ. Вижте по-долу JUnit gui:
Резюме :
- JUnit е рамка, която поддържа няколко анотации за идентифициране на метод, който съдържа тест.
- JUnit предоставя анотация, наречена @Test, която казва на JUnit, че публичният void метод, в който се използва, може да се изпълни като тестов случай.
- Тестовото устройство е контекст, в който се изпълнява тестовия случай
- За да се изпълнят множество тестове в определен ред, това може да се направи чрез комбиниране на всички тестове на едно място. Това място се нарича тестови апартаменти.
- JUnit предоставя инструмент за изпълнение на тестовете, където можем да стартираме нашите тестови случаи, посочени като Test Runner.