junit vs testng what are differences
Свеобухватно поређење између ЈУнит Вс ТестНГ оквира. Укључује поређење напомена и поређење по карактеристикама са примерима:
У претходном водичу научили смо анотацију ДисплаиНаме и условно извршавање теста на основу различитих критеријума попут верзије ЈРЕ, променљивих околине итд. Такође смо се позабавили неким важним питањима око теме.
Будући да смо континуирано учили о ЈУнит-у у претходним водичима, овај ће послужити као одушка нашој публици, јер ћемо неко време преусмерити фокус са ЈУнит-а као јединственог програма на поређење између ЈУнит-а и ТестНГ-а.
=> Овде погледајте Тхе Перфецт ЈУнит Траининг Гуиде.
Шта ћете научити:
- ЈУнит Вс ТестНГ: Поређење
- Закључак
ЈУнит Вс ТестНГ: Поређење
Карактеристике | ЈУнит | ТестНГ |
---|---|---|
Временско ограничење за тестове | да | да |
Оквир отвореног извора | да ЈУнит је оквир отвореног извора | да ТестНГ је оквир отвореног извора |
Усер фриендли | ЈУнит се дистрибуира кроз различите модуле, пример: ? За параметаризацију ће вам можда требати ЈУнит Јупитер. ? Ово чини ЈУнит помало незграпним за употребу у поређењу са ТестНГ | Све функције ТестНГ долазе у једном модулу. Ово чини ТестНГ једноставнијим за кориснике. |
Главна подршка за ИДЕ ( Пример: Ецлипсе, ИнтеллиЈ) | да Обе подржавају већину ИДЕ-а подједнако | да Обе подржавају већину ИДЕ-а подједнако |
Примена напомена | да ЈУнит ради на напоменама са малим варијацијама за различите карактеристике | да ТестНГ ради на напоменама са малим варијацијама за различите карактеристике |
Спровођење тврдњи | да ЈУнит пружа довољно тврдњи за потврђивање очекиваних и стварних резултата са неким варијацијама тврдњи у ТестНГ-у | да ТестНГ такође подржава огромну листу тврдњи за поређење очекиваних и стварних резултата. Поред тога, ТестНГ пружа два механизма за тврдње - Софт Ассертион и Хард Ассертион |
Изузеци | да ЈУнит пружа функцију за тест изузетка са малим одступањима од ТестНГ-а | да ТестНГ такође пружа функцију за тест изузетка |
Параметарска испитивања | да ЈУнит подржава параметризоване тестове | да ТестНГ такође подржава параметризоване тестове |
Тест Суите | да ЈУнит подржава употребу пробних пакета | да ТестНГ такође подржава Тест Суите. |
Тест зависности | Немој ЈУнит не подржава функцију за тест зависности | да Ово је напредна функција у ТестНГ-у преко ЈУнит-а. Помоћу ове функције једна метода се може учинити зависном од друге, тако да ће се метода изводити тек након што се зависна метода покрене и прође, а зависни тест се неће покренути. |
Паралелно извршавање теста | Немој Паралелно извршавање није доступно у ЈУнит-у | да ТестНГ подржава паралелно извршавање тестова, али ЈУнит не. Постоји ТестНГ кмл где се паралелно извршавање може поставити |
Мавен интеграција | да Оба алата подржавају Мавен интеграцију | да Оба алата подржавају Мавен интеграцију |
Имплементације претпоставки | да Претпоставке се користе за прескакање тестова заснованих на одређеним претпоставкама или условима а ово је применљиво само у ЈУнит-у. | Немој ТестНГ не подржава претпоставке |
Налог за извршење теста | да Јунит подржава редослед извршавања теста. | да ТестНГ подржава редослед извршавања теста |
Примена слушалаца | да ЈУнит подржава слушаоце не путем напомена већ кроз АПИ за слушатеље. | да ТестНГ подржава слушаоце путем напомена. |
Занемари тестове | да Оба подржавају онемогућавање тестова, али ЈУнит подржава онемогућавање тестова за извршавање на основу различитих услова | да Оба подржавају онемогућавање тестова |
Извештавање | да ЈУнит мора бити интегрисан са мавен за генерисање ХТМЛ извештаја | да ТестНГ има уграђене ХТМЛ извештаје. Може се интегрисати са Мавен-ом или са спољним библиотекама извештавања као што су АТУ извештаји или Ектент извештаји |
Поређење напомена
ТестНГ и ЈУнит су оквири за јединствено тестирање из света Јаве. Обе примене имају врло ближе и сличне карактеристике. У овом одељку ћемо размотрити неке сличности у примени неколико карактеристика, док ћемо такође видети неколико других карактеристика које су различито примењене у ЈУнит и ТестНГ.
# 1) Ознака методе испитивања
Нема разлике у начину на који одређујемо методу као тест методу и у ЈУнит и у ТестНГ.
ЈУНИТ 5 | ТестНГ |
---|---|
@Тест | @Тест |
# 2) Напомена везана за Суите
- Метода са ознаком @БефореСуите извршава се једном пре покретања тренутног пакета тестова.
- Ова напомена је применљива само у програму ТестНГ.
ЈУНИТ 5 | ТестНГ |
---|---|
Није применљиво | @БефореСуите |
# 3) Напомена за метод пре класе
Ово је напомена за методу која се извршава једном пре покретања прве методе испитивања у класи.
ЈУНИТ 5 | ТестНГ |
---|---|
@БефореАлл | @Пре наставе |
# 4) Напомена за методу пре теста
- Ова напомена се извршава једном пре метода декларисаних унутар ознаке тестнг.кмл.
- Ова напомена је доступна само за ТестНГ.
ЈУНИТ 5 | ТестНГ |
---|---|
Није применљиво | @БефореТест |
# 5) Напомена за методу која се извршава пре сваке методе са позивима @Тест
ЈУНИТ 5 | ТестНГ |
---|---|
@БефореЕацх | @БефореМетход |
# 6) Напомена за методу која се извршава након сваке методе са позивима @Тест
ЈУНИТ 5 | ТестНГ |
---|---|
@АфтерЕацх | @АфтерМетход |
# 7) Напомена за методу након теста
- Ова напомена се извршава једном након метода декларисаних унутар ознаке тестнг.кмл.
- Ова напомена је доступна само за ТестНГ.
ЈУНИТ 5 | ТестНГ |
---|---|
Није применљиво | @АфтерТест |
# 8) Напомена за методу након часа
Ово је напомена да се метода извршава једном након покретања последњег метода испитивања у класи.
ЈУНИТ 5 | ТестНГ |
---|---|
@После свега | @После часа |
# 9) Напомена о онемогућавању извршавања методе испитивања.
- ЈУнит 5 пружа напомену да онемогући одређено извршење теста.
- ТестНГ пружа атрибут за @Тест, тј. „Омогућен“ са логичком вредношћу која одлучује да ли ће извршење методе бити онемогућено или омогућено
ЈУНИТ 5 | ТестНГ |
---|---|
@игноре | @Тест (омогућено = нетачно) |
Погледајте Водич 7 Прескакање извршења да бисте разумели како да онемогућите тестове у ЈУнит4 вс ЈУнит 5
# 10) Напомена о временском ограничењу
Напомена је иста за ЈУнит 5 и ТестНГ
ЈУНИТ 5 | ТестНГ |
---|---|
@Тест (тимеоут = 2000) | @Тест (тимеоут = 2000) |
# 11) Очекивани атрибут изузетка
- Класа Екцептион наводи да се приликом извршавања теста баца изузетак дате класе.
- Ово је подржано и у ЈУнит-у и у ТестНГ-у са варијацијама у начину на који су оба декларисана.
ЈУНИТ 5 | ТестНГ | |
---|---|---|
@Тест (очекује се = НуллПоинтерЕкцептион.цласс) | @Тест (очекује сеЕкцептион = НуллПоинтерЕкцептион.цласс) |
# 12) Напомена везана за суите
- Метода са ознаком @АфтерСуите извршава се једном након покретања тренутног пакета тестова.
- Ова напомена је применљива само у програму ТестНГ.
ЈУНИТ 5 | ТестНГ |
---|---|
Није применљиво | @АфтерСуите |
# 13) Напомена везана за групу
- Напомена је доступна само у програму ТестНГ.
- Метода са ознаком @БефореГроупс покреће се пре него што се покрену методе испитивања које припадају одређеној групи.
ЈУНИТ 5 | ТестНГ | |
---|---|---|
Није применљиво | @БефореГроупс |
- Напомена је доступна само у програму ТестНГ.
- Метода са ознаком @БефореГроупс покреће се након покретања метода испитивања које припадају одређеној групи.
ЈУНИТ 5 | ТестНГ |
---|---|
Није применљиво | @АфтерГроупс |
# 14) Биљешке повезане са редоследом извршења
И ЈУнит и ТестНГ подржавају изричито постављање редоследа тестова за извршење. Другим речима, постављање приоритета за тест случајеве.
- ЈУнит 5 има напомену @ТестМетходОрдер () са уграђеном класом пакета МетходОрдерер - Алпханумериц.цласс или ОрдерАннотатион.цласс или Рандом.цласс као улазни параметар за напомену.
Погледајте Туториал 9 - Налог за извршење Јунит теста за више детаља о постављању налога за извршавање теста у ЈУнит-у.
- ТестНГ укључује атрибут „приоритет“ за напомену @Тест, која прихвата нумеричку вредност.
ЈУНИТ 5 | ТестНГ |
---|---|
@ТестМетходОрдер (алфанумерички.класа) | @Тест (приоритет = 1) |
Основни програм за ТестНГ и ЈУнит 4
# 1) ТестНГ код
package newtest.com; import org.testng.annotations.Test; import org.testng.annotations.BeforeMethod; import org.testng.annotations.AfterMethod; import org.testng.annotations.DataProvider; import org.testng.annotations.BeforeClass; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeTest; import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeSuite; import org.testng.annotations.AfterSuite; public class NewTestng { @Test(dataProvider = 'dp') public void f(Integer n, String s) { System.out.println(' * * * * * * *Parameterized method * * * * * * * * * '); System.out.println('Integer '+n+' String '+s); System.out.println(' * * * * * * * * * * * * * * * * '); } @BeforeMethod public void beforeMethod() { System.out.println('Before Method'); } @AfterMethod public void afterMethod() { System.out.println('After Method'); } @DataProvider public Object()() dp() { return new Object()() { new Object() { 1, 'a' }, new Object() { 2, 'b'}, }; } @BeforeClass public void beforeClass() { System.out.println('Before Class'); } @AfterClass public void afterClass() { System.out.println('After Class'); } @BeforeTest public void beforeTest() { System.out.println('Before Test'); } @AfterTest public void afterTest() { System.out.println('After Test'); } @BeforeSuite public void beforeSuite() { System.out.println('Before Suite'); } @AfterSuite public void afterSuite() { System.out.println('After Suite'); } }
Очекивани излаз:
# 2) ЈУнит 4 код
package demo.tests; import static org.junit.Assert.*; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.BeforeClass; import org.junit.AfterClass; public class JunitTest { @Parameterized.Parameters public static Object()() data() { return new Object(3)(0); } @BeforeClass public static void beforeClass() { System.out.println('Before Class'; } @Before public void beforeMethod() { System.out.println('Before Method'); } @Test public void f() { System.out.println(' * * * * * * *test * * * * * * * * * '); int n=10; System.out.println('Integer '+n); System.out.println(' * * * * * * * * * * * * * * * * '); } @After public void afterMethod() { System.out.println('After Method'); } @AfterClass public static void afterClass() { System.out.println('After Class'); } }
Очекивани излаз:
ЈУнит 5 вс ТестНГ: Разлика у карактеристикама са примерима
# 1) Тест Суите
- Пакет тестова је збирка тестова, што значи да ми некако сакупљамо више случајева из више класа.
- Приступ који ТестНГ користи пакет је другачији и моћан у поређењу са приступом ЈУнит-а.
Пробни пакет у ЈУнит-у 5
Погледајмо брзо како ЈУнит 5 примењује тест пакет.
Погледајте Водич 8 -Јунит Тест Суитес & Филтеринг Тест примери за боље разумевање примене пакета тестова у ЈУнит 4 и ЈУнит 5.
@RunWith(JUnitPlatform.class) @SelectClasses({JUnit5TestCase1.class, JUnit5TestCase2.class }) public class JUnitTestSuite { }
Тест пакет у ТестНГ-у
ТестНГ користи КСМЛ као шаблон у наставку да облози све логички повезане класе теста
# 2) Параметарски тест
И ТестНГ и ЈУнит омогућавају параметризацију тестова што није ништа друго него извођење истих тестова са варијацијама података.
Параметарски тест у ЈУнит 4
@RunWith(value=Parameterized.class) public class JUnitclass{ int n; public JUnitclass (int num){ this.n=num; } @Parameters public static Iterable data(){ Object()() objectArray =new Object()() {{1},{2},{3}}; returnArrays.asList(objectArray); } @Test public void Junittst(){ System.out.println(“Multiples of 2 are :”+ 2*n); } }
Параметарски тест у ТестНГ
Постоје два начина како можете да користите параметризацију у ТестНГ-у
- @Параметерс и пролазак кроз ТестНГ КСМЛ
- Напомена @ДатаПровидер
а) @Параметерс и пролазак кроз ТестНГ КСМЛ
public class testins{ @Test @Parameters(value=”env_pd”) public void paramEnv(str env_pd){ If(env_pd=”QA”){ url=”definetest.com” } else if(env_pd=”accpt”){ url=”defineacc.com” }}}
КСМЛ за исти
б) ДатаПровидер
Биљешка ДатаПровидер увијек враћа Објецт () () који је низ објеката.
@DataProvider(name='state') public Object()() getDataFromDataprovider(){ return new Object()() { { 'Maharashtra', 'Pune' }, { 'Karnataka', 'Bangalore' }, { 'Kerala', 'Trivandrum' } }; @Test(dataProvider=”state”) public void paramMethd(str stateName, str cityName){ System.out.println(stateName+” ”+cityName); }
# 3) Временско ограничење
Ако се одређени тест не заврши у предвиђеном времену, тада ће доћи до истека времена. У другом случају, нит се прекида.
најбољи бесплатни алат за поправку система Виндовс 7
Временско ограничење у ЈУнит-у
Постоје различити приступи имплементацији временског ограничења у ЈУнит-у. Су:
- Коришћење уобичајеног временског ограничења са одређеним милисекундама
- Користећи тимеоут са тврдњом
- Коришћење глобалног временског ограничења
Имаћемо детаљан водич са фокусом на временско ограничење за ЈУнит 4 и ЈУнит 5.
Испод је исечак који приказује употребу уобичајеног временског ограничења у ЈУнит 5:
како монтирати .бин датотеке
@Test(timeout = 5000) public void testTimeout() throws InterruptedException { while (true) { } }
Горње временско ограничење теста након 5 секунди.
Временско ограничење у програму ТестНГ
ТестНГ такође користи једноставан начин примјене временског ограничења:
@Test(timeout = 5000) public void testTimeout() throws InterruptedException { while (true) { } }
# 4) Тест изузетка
Тест изузетка осигурава да када се овај унапред дефинисани изузетак баци, он буде грациозно ухваћен и обавештен у евиденцијама.
Тест изузетка у ЈУнит-у 4
@Test (expected = NumberFormatException.class) public void converttoint() { Int j=Integer.parseInt(“Four”); }
Биће одвојено упутство које ће детаљно обрађивати изузетке за ЈУнит 4 и 5.
Тест изузетка у ТестНГ
Постоји мала промена у декларацији теста за изузеће у ТестНГ:
@Test (expectedExceptions = NumberFormatException.class) public void converttoint() { Int j=Integer.parseInt(“Four”); }
# 5) Онемогући тест
И ТестНГ и ЈУнит омогућавају онемогућавање теста за извршење.
Онемогућени тест у ЈУнит 5
Ознака @Дисаблед када се користи на врху класе, сви тестови унутар класе се прескачу ради извршења. Напомена када се користи изнад одређене @Тест методе, тај одређени тест случај је онемогућен за извршење.
import org.junit.AfterClass; @Disabled('the testcase is under development') public class JUnitProgram {
Онемогућени тест у ТестНГ
ТестНГ дозвољава да тест онемогући извршавање теста када је атрибут „омогућен“ напомене @Тест постављен на фалсе и омогућен је када је атрибут постављен на труе. Ако сви тестови у класи морају бити омогућени, онда изричито означите енаблед = труе за сваку методу @Тест.
Испод је исечак кода који показује прескакање теста.
@Test(enabled=false) public void f_validate(){ // let us skip this function}
# 6) Групни тестови
Било је контрадикторних изјава на више веб локација и форума где су људи помињали да ЈУнит никада није подржао груписање тестова са одређеним именом групе.
Напомене @БефореГроупс и @АфтерГроупс долазе само са ТестНГ-ом, али груписање је дозвољено у ЈУнит 4, као и у ЈУнит 5. Овде ћемо брзо показати употребу групних тестова у ЈУнит 5. Групни тестови се називају категорије у ЈУнит 4 и Тагови у ЈУНИТУ 5.
Можете се позвати на Водич 8 - ЈУнит тест пакети и тестови филтрирања за детаље о употреби у ЈУнит-у.
Групни тестови у ЈУнит-у 5
@Tag(“Regression”) @Test public void junitMethod1(){} @Tag(“SmokeTest”) @Test public void junitMethod2(){
Фрагмент кода са ЈУнит5ТестСуите.јава:
Доњи код укључује групу са именом „Регресија“ и искључује групу „СмокеТест“ која претпоставља да ће јунитМетход1 () бити покренута, али јунитМетход2 () је искључена.
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @IncludeTags(“Regression”) @ExcludeTags(“SmokeTest”) public class JUnit5TestSuite { }
Групни тестови у ТестНГ-у
Ако горњи исечак треба да се протумачи у ТестНГ-у, онда је испод код за исти:
@Test(groups={“Regression” }) public void junitMethod1(){} @Test(groups={“SmokeTest” }) public void junitMethod2(){}
ТестНГ КСМЛ је следећи:
Овде су методе регресионе групе укључене у покретач, док су остале групе, укључујући СмокеТест, изузете.
# 7) Паралелни тестови
Ово је функција која је доступна само са ТестНГ-ом. Обично су тест случајеви врсте нити које се призивају једна за другом. Међутим, ако желите уштедети на времену извршавања, можете то контролисати у ТестНГ-у постављањем тестова који ће се паралелно изводити и пружањем броја нити које треба покренути одједном.
Укратко ћемо показати употребу овде зависних метода и нећемо расправљати о зависним групама.
Зависни тест за другу методу поставља се путем ТестНГ КСМЛ на следећи начин:
# 8) Зависни тестови
Зависни тестови су напредне функције доступне само уз ТестНГ. Зависности могу бити на тесту или на групи.
@Test mytest1(){ System.out.println(“My test : mytest1”); } @Test (dependensOnMethods={“mytest1”}) public void mytest2(){ System.out.println(“My test : mytest2”); }
У горњем програму, како митест2 зависи од митест1, прво се покреће митест1, а затим се покреће митест2. Ако митест1 не успије, тада се неће покренути митест2. На овај начин се зависни тест случајеви могу унапред дефинисати за контролу одређеног тока посла који желите да извршите.
# 9) Слушаоци
Слушаоци слушају сваки догађај који се догоди у оквиру тестова. Слушаоци су подржани како у ЈУнит-у, тако и у ТестНГ-у. Дакле, ако желите да извршите одређене задатке или прикажете одређену поруку у евиденцији пре почетка теста, након завршетка теста, када се тест прескочи, када је тест положен или није успео, имамо ове функције слушаоца које нам омогућавају да урадите
ЈУнит користи класу Листенер, а ТестНГ користи интерфејс Листенер. ТестНГ напише класу слушача која дефинише методе интерфејса слушача, а други корак је позивање овог назива класе слушача помоћу ознаке @Листенерс у главној класи.
ЈУнит такође наслеђује методе из родитељске класе Листенер, након чега је дефинисана класа руннер Листенер за примену функција слушатеља на једну или више главних класа.
Слушалац у ТестНГ-у
Постоји интерфејс ИТестЛистенер из којег је имплементиран ТестНГ.
Испод су методе које треба дефинисати када се имплементира ИТестЛистенер -
- ОнТестСтарт ()
- ОнТестФаилуре ()
- ОнТестСуццесс ()
- ОнТестСкиппед ()
- ОнСтарт ()
- ОнФинисх ()
Испод је исечак кода који демонстрира онТестСтарт () и онТестСуццесс ()
import org.testng.ITestListener; import org.testng.ITestResult; public class TestListener implements ITestListener { @Override public void onTestStart(ITestResult result) { System.out.println('Execution started: '+result.getName()); } @Override public void onTestSuccess(ITestResult result) { System.out.println('Test Passed '+result.getName()); }
Позовите ову класу слушатеља у своју главну класу, као што је приказано доле, користећи напомену @Листенер:
import org.testng.annotations.Listeners; import org.testng.annotations.Test; @Listeners(com.javatpoint.Listener.class) public class MymainClass { @Test public void sum() {
Слушалац у ЈУнит 5
РунЛистенер је класа коју ваша класа слушача треба да прошири како би дефинисала функције слушаоца.
За ЈУнит имамо следеће методе:
- тестРунСтартед
- тестРунФинисхед
- тестФаилуре
- тесИгноред
import org.junit.runner.notification.Failure; import org.junit.runner.notification.RunListener; public class Mylistenerclass extends RunListener { public void testRunStarted(Description desc) throws java.lang.Exception { System.out.println('Execution started' + desc.getMethodName()); } public void testRunFinished(Description desc) throws java.lang.Exception { System.out.println('Execution finished' + desc.getMethodName()); }
Потребно је креирати класу извршења слушалаца да би се позвала горња класа слушаоца.
Класу слушатеља Милистенер можете применити на више класа помоћу метода испитивања.
public class ListenerRunner { public static void main(String() args) { JUnitCore runme = new JUnitCore(); runme.addListener(new ListenerRunner()); runner.run(FirstClass.class, SecondClass.class); }
Закључак
У овом водичу за ЈУнит Вс ТестНГ упоредили смо оквире ТестНГ и ЈУнит. Сазнали смо заједничке карактеристике подржане у оба оквира као и додатне функције подржане само у ТестНГ-у. Очигледно постоји само неколико додатних функција само у ТестНГ-у, попут паралелног извршавања и тестова зависности. Већина функција које подржава ТестНГ је такође доступна у ЈУнит-у.
Постоје мала одступања у погледу синтаксе, терминологије у ЈУнит-у у односу на ТестНГ за заједничке карактеристике. Они који су поткопали снагу ЈУнит-а над ТестНГ-ом би до сада схватили, тј. ЈУнит је такође један од моћних оквира за аутоматизацију.
Вратићемо се са још много занимљивих аспеката ЈУнит-а. Држите се предстојећих водича !!!
Препоручено читање
- Водич за ЈУнит за почетнике - шта је ЈУнит тестирање
- Списак ЈУнит напомена: ЈУнит 4 вс ЈУнит 5
- Како се користи напомена ЈУнит 5 @ Поновљени тест са примерима
- ЈУнит Игноре Тест Цасе: ЈУнит 4 @Игноре Вс ЈУнит 5 @Дисаблед
- Инсталација ТестНГ-а, основни програм и извештаји
- Биљешке и слушаоци ТестНГ-а
- Водич за ТестНГ: Увод у ТестНГ Фрамеворк
- Тврдње у селену помоћу Јунит и ТестНГ оквира