junit test suite filtering test cases
Овај водич ће расправљати о томе шта је ЈУнит Тест Суите, како направити тест пакет и како филтрирати тест случајеве у ЈУнит 4 у односу на ЈУнит 5:
О томе како прескочити одређене тест случајеве током извршавања научили смо у нашем претходном водичу. Такође смо сазнали о различитим напоменама које се користе у ЈУнит 4 и ЈУнит 5 за то.
У овом упутству ћемо научити:
- Шта је тест пакет?
- Како да креирамо тестни пакет тако што ћемо повезати више тест случајева у групу и извршити пакет користећи класу ЈУнитЦоре?
=> Посетите овде за ексклузивну серију лекција за ЈУнит тренинг.
Шта ћете научити:
ЈУнит Тест Суите
ЈУнит 4: @РунВитх, @СуитеЦлассес Аннотатионс
Водич Више начина за извршавање ЈУнит тестова илустровао како се креира тест пакет у ЈУНИТ 4.
Биљешке @РунВитх и @СуитеЦлассес помогао нам је да створимо тестни скуп груписањем вишеструких класа ЈУнит теста. После тога, датотека покретача са класом ЈУнитЦоре.рунцлассес () позвала је на извршење креираног тест пакета.
Погледајте поменути одељак за све детаљне детаље о току рада заједно са стварним кодом за ЈУНИТ 4.
ЈУнит 5: @РунВитх, @СелецтЦлассес, @СелецтПацкагес Аннотатионс
Стварање тест пакета у ЈУНИТ 5 је прилично слично ономе што имамо у ЈУнит-у 4. Па, где је онда разлика?
# 1) У ЈУНИТ 4 , имамо Суите.цласс који се прослеђује као параметар ознаци @РунВитх за подршку стварању пробног пакета, док ЈУНИТ 5 користи исту напомену @РунВитх, али са улазним параметром као ЈУнитПлатформ.цласс уместо Суите.цласс .
Дакле, линија кода у ЈУнит 5 изгледа @РунВитх (ЈУнитПлатформ.цласс). Ово је напомена која долази у пакету са вашим потпројектом ЈУнит Платформ.
#два) У ЈУНИТ 4 , користимо @СуитеЦлассес да групише више класа ЈУнит одвојених зарезом док је у ЈУНИТ 5 имамо:
- Напомена @СелецтЦлассес то је еквивалентно са @СуитеЦлассес у ЈУнит 4 за груписање више класа ЈУнит.
- @СелецтПацкагес напомена се користи за груписање вишеструких тестова из пакета. Треба да унесете вредност низа низа која представља пакет који желите да укључите.
Дакле, другим речима,
- Ако у случају да желите груписати тестове из једног пакета, ЈУнит 5 вам то омогућава.
- Или у случају да желите да групишете тестове из више пакета, ЈУнит 5 подржава да и то радите. Овде треба имати на уму да се тестови у свим потпакетима поменутог пакета такође подразумевано укључују у пакет за тестирање.
ЈУНИТ 5: Различити сценарији / примери
Креирање скупа за тестирање груписања више класа теста
Исечак кода је приказан испод:
@RunWith(JUnitPlatform.class) @SelectClasses({JUnit5TestCase1.class, JUnit5TestCase2.class }) public class JUnitTestSuite { }
Креирање пробног пакета за један пакет
Исечак кода је приказан испод:
@RunWith(JUnitPlatform.class) @SelectPackages({“ demo.tests “}) public class JUnit5TestSuite { }
Белешка :
- Реци демо.тестови пакет има подпакет демо.тестс.субтестс.
- Код @СелецтПацкагес ({„демо.тестс“}) такође ће укључити све тестове из потпакета у пакет за тестирање; подразумевано.
- Да сте изјавили @СелецтПацкагес ({„демо.тестс.субтестс“}) , тест случајеви у оквиру подпакета демо.тестс.субтестс биће укључени само у пакет за тестирање, док ће тестови из његовог родитељског пакета, тј. демо.тестови не би били укључени.
Креирање пробног пакета за више пакета
Фрагмент кода за креирање пробног пакета за више пакета одвојено зарезом у ЈУнит 5 - изгледаће као што је приказано доле:
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests”, “demo1.tests”, “demo2.tests”}) public class JUnit5TestSuite { }
Филтерски тестни пакет - ЈУнит 4 вс ЈУнит 5
Понекад морамо филтрирати случајеве испитивања и извршити одређени скуп тестова према нашим потребама. На пример, могао би да постоји скуп тестова идентификованих за регресијско тестирање, засебни скуп за јединствено тестирање и засебан сет тест случајева за испитивање дима.
Морамо да искључимо или уврстимо тест случајеве из одређених пакета или класа или категорија. Филтрирање или означавање тестова из једног пакета је једина опција код ЈУнит4.
У поређењу са ЈУнит 4, ЈУнит 5 долази са добрим скупом функција које подржавају ову потребу за филтрирањем тест случајева из једног пакета или више пакета и потпакета у складу са вашим променљивим захтевима.
ЈУнит 4 - @Цатегори, @ИнцлудеЦатегори, @ЕкцлудеЦатегори
Тест примери у ЈУнит 4 могу се сврстати у различите категорије. Ове категорије могу бити изузете или укључене током извођења теста. Биљешке @Цатегори, @ИнцлудеЦатегори и @ЕкцлудеЦатегори подржани су од ЈУнит 4.12 и новије верзије.
Кораци на високом нивоу за креирање филтера на основу категорије или категорија су следећи:
# 1) Направите маркер интерфејс који игра улогу у категорији.
#два) Означите методе испитивања класа које ће бити укључене у СуитеЦлассес @Категорија и назив категорије.
# 3) У датотеци тест пакета користите напомену @ИнцлудеЦатегори са називом категорије који укључује тестове који припадају одређеној категорији.
# 4) У датотеци тест пакета користите напомену @ЕкцлудеЦатегори са називом категорије за њихово искључивање.
# 5) Напомена @Цатегори може се користити и на нивоу теста или на нивоу класе. Ако се напомена примењује на нивоу теста, тада се тај одређени тест означава датом категоријом, док ако је напомена на нивоу класе, сви тестови у класи су означени датом категоријом.
Погледајмо још неке детаље да бисмо разумели практичну примену категоризације тестова и филтрирања за извршење:
Корак 1:
Започећемо са стварањем а интерфејс маркера који ће играти улогу А. категорија за методе испитивања. Овде креирамо категорију са именом УнитТест . Код је врло једноставан. Погледајте доњи код.
Код за УнитТест.јава
package demo.tests; public interface UnitTest {}
Корак 2:
Означићемо категорију на ниво методе испитивања у класи ЈУнитТестЦасе1.јава . Да бисмо додали тест случај јунитМетход1 () у категорију УнитТест, треба да означимо методу тестирања са @Цатегори (УнитТест.цласс) .
Ово додаје методу испитивања у категорију УнитТест. Остале методе испитивања (ако постоје) нису означене категоријом, осим ако методе нису означене категоријом.
Да би напомена @Цатегори радила у нашем коду, морамо да увеземо пакет орг.јунит.екпериментал.цатегориес.Цатегори
Исјечак кода из ЈУнитТестЦасе1.јава:
@Category(UnitTest.class) @Test public void junitMethod1(){ int Value2=9000; Assert. assertEquals (Value1, Value2); }
Алтернативно, метода испитивања такође може припадати више категорија На пример. : @Цатегори (УнитТест.цласс, СмокеТест.цласс)
Корак 3:
Сад бих означио категорију на нивоу одељења у класи ЈУнитТестЦасе2.јава . Иста изјава која је додата на нивоу методе испитивања у претходном кораку биће додата и у тренутну датотеку класе.
Имајте на уму да ћемо овде додати изјаву на нивоу класе. То ће учинити све методе испитивања у датотеци припадају УнитТест Категорија.
Исјечак кода из ЈУнитТестЦасе2.јава:
@Category(UnitTest.class) @Test public class JUnitTestCase2 { public String stringValue='JUnit';
Корак 4:
како конфигурисати ецлипсе за ц ++
Сада када су наши потребни тестови категоризовани у категорију УнитТест, сада ћемо видети како да их додамо у тестни пакет филтрирањем на основу категорије. Направићемо одређене промене кода у ЈУнитТестСуите.цласс да то демонстрирају.
- Категорије.класа биће прослеђен као параметар ознаци @РунВитх.
- @ Суите.СуитеЦлассес ће узети низ низова класа тестова.
- Напомена @ Цатегориес.ИнцлудеЦатегори требат ће УнитТест.цласс као параметар.
- Ова изјава ће нам помоћи да филтрирамо читав пакет и покренемо само оне тестове из пакета који припада категорији.
- Цатегориес.цласс треба пакет орг.јунит.екпериментал.цатегориес.Цатегориес да се увезе.
Фрагмент кода за ЈунитТестСуите.јава
@RunWith(Categories.class) @Categories.IncludeCategory(UnitTest.class) @Suite.SuiteClasses({JUnitTestCase1.class, JUnitTestCase2.class}) public class JUnitTestSuite {
Напомена @ Цатегориес.ИнцлудеЦатегори може се записати и као @ИнцлудеЦатегори. Такође можете креирати више интерфејса (категорија) и методе класе / теста означити са више категорија одвојених зарезом. Следећи пример ће филтрирати тестове који припадају категорији - категорија1 и категорија2.
Пример: @ИнцлудеЦатегори ({Цатегори1.цласс, Цатегори2.цласс})
Слична правила иду уз @ Цатегориес.ЕкцлудеЦатегори / @ЕкцлудеЦатегори да се током испитивања искључе методе испитивања из категорије или категорија.
ЈУнит 5 - @ИнцлудеТагс, @ЕкцлудеТагс, @ИнцлудеПацкагес, @ЕкцлудеПацкагес, @ИнцлудеЦлассНамеПаттернс, @ЕкцлудеЦлассНамеПаттернс
ЈУнит 5 долази у пакету са више приступа за организовање и филтрирање тест случајева.
ЈУнит 5 - @ИнцлудеТагс, @ЕкцлудеТагс
# 1) Као што и ЈУнит 4 има напомене @ИнцлудеЦатегори и @ЕкцлудеЦатегори за подршку филтрирању тест случајева за извршење.
#два) ЈУнит 5 има напомене @ИнцлудеТагс и @ЕкцлудеТагс да би се постигла иста сврха.
# 3) ЈУнит 4 се односи на тест случајеве који треба да буду организовани у одређену категорију, док се ЈУнит 5 односи на означавање тест случајева одређеном ознаком како би се омогућило филтрирање тест случајева за извршење.
Кораци на високом нивоу за креирање филтера на основу ознака су следећи:
- Означите методе испитивања пакета који ће бити укључени у @СелецтПацкагес са @Таг и кориснички дефинисано име ознаке. Једна класа може имати различите ознаке за различите методе испитивања.
- Такође можете означити @Таг на нивоу класе тако да су сви тестови у класи означени.
- У датотеци тест пакета користите напомену @ИнцлудеТагс са именом ознаке која укључује тестове који припадају одређеној ознаци.
- У датотеци тест пакета користите напомену @ЕкцлудеТагс са именом ознаке за њихово искључивање из пакета за тестирање.
Хајде сада да имамо детаљну илустрацију како практично применити филтрирање у ЈУнит 5.
Корак 1 : Означавамо тест методу у ЈУнит5ТестЦасе1.јава на име ознаке „Регресија“
Фрагмент кода из ЈУнит5ТестЦасе1.јава:
@Tag(“Regression”) @Test public void junitMethod1(){
Корак 2 : Означавамо тест методу у ЈУнит5ТестЦасе2.јава на име ознаке „СмокеТест“.
Фрагмент кода из ЈУнит5ТестЦасе2.јава:
@Tag(“SmokeTest”) @Test public void junitMethod2(){
Корак 3: Сада када су методе испитивања означене, сада ћемо ажурирати ЈУнит5ТестСуите.јава да бисмо додали одговарајуће филтере по ознакама за тестове. Доле наведени код укључује све тестове који су означени као „Регресија“ и изузимају све оне који су означени као „СмокеТест“.
Фрагмент кода из ЈУнит5ТестСуите.јава:
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @IncludeTags(“Regression”) @ExcludeTags(“SmokeTest”) public class JUnit5TestSuite { }
ЈУНИТ 5 - @ИнцлудеПацкагес, @ЕкцлудеПацкагес
То већ знамо када проследимо име пакета у @СелецтПацкагес напомена, тестови у потпакетима пакета такође се додају у пакет за тестирање.
Могли би постојати одређени потпакети које желимо да уврстимо у наш тестни пакет, док би неколико других потпакета које не желимо или можда нису релевантни било укључено у наш пакет.
Ово је олакшано путем напомена @ИнцлудеПацкагес и @ЕкцлудеПацкагес у ЈУНИТУ 5.
Претпоставимо да имамо пакет „демо.тестс“ који има три потпакета, тј. Подпакет1, подпакет2 и потпакет 3 са својим тест класама у сваком од доле наведених пакета.
Погледајмо исечак кода ЈУнит5ТестСуите.јава да визуализујемо како да укључимо и изузмемо пакет.
Сценарио # 1: Примените филтер да бисте укључили само тест примере из потпакета1.
Доле наведени код укључује све тестове из свих класа ЈУнит у пакету демо.тестс.субпацкаге1, међутим, искључује све тестове директно под пакетом демо.тест и оне под пакетним пакетом2 и потпакета3.
Фрагмент кода из ЈУнит5ТестСуите.јава:
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @IncludePackages(“demo.tests.subpackage1”) public class JUnit5TestSuite { }
Сценарио # 2: Примените филтер да бисте из подпакета3 искључили само тест случајеве.
Доле наведени код искључује све тестове из класа ЈУнит у пакету - демо.тестс.субпацкаге3, међутим пакет укључује све тестове директно под пакетом демо.тест и оне под пакетом пакет1 и подпакет2.
Фрагмент кода из ЈУнит5ТестСуите.јава:
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @ExcludePackages(“demo.tests.subpackage3”) public class JUnit5TestSuite { }
ЈУнит 5 - @ИнцлудеЦлассНамеПаттернс, @ЕкцлудеЦлассНамеПаттернс
Када из пакета желите да укључите или изузмете одређене класе које се подударају са одређеним регуларним изразом, напомене @ ИнцлудеЦлассНамеПаттернс и @ ЕкцлудеЦласснамеПаттернс може се користити у датотеци класе тест пакета.
Погледајмо сада илустрацију кроз ажурирање кода у ЈУнит5ТестСуите.јава
Сценарио # 1:
Доњи код укључује класе које се завршавају са „Цтестс“ из пакета демо.тестс
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @IncludeClassNamePatterns({'^.*CTests?$'})
Сценарио # 2:
Сада ћемо изузети оне класе које иницирати са „СТест“ из пакета демо.тестс
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @ExcludeClassNamePatterns({'^STest.*$'})
Сценарио # 3:
Вишеструки регуларни изрази такође се могу проследити као критеријуми филтера. Доњи код наводи два различита регуларна израза одвојена знаком „ ИЛИ ”Оператер. Прорезна трака | је овде оператер ОР.
питања и одговори за подешавање орацле перформанси
Код филтрира класе иницирање са Тест ( Тест.*) или завршавајући се са Тестови (*. Тестови?) и укључује те класе у тест пакету јер се користи напомена @ИнцлудеЦлассНамеПаттернс.
Белешка: Ако се потпуно квалификовано име класе подудара са најмање једним обрасцем, тада ће се класа дохватити према напомени @ИнцлудеЦлассНамеПаттернс или @ЕкцлудеЦлассНамеПаттернс.
@РунВитх (ЈУнитПлатформ.цласс)
@СелецтПацкагес ({„демо.тестс“})
@ИнцлудеЦлассНамеПаттернс (. * Тестови?) $ ”)
Честа питања о ЈУнит филтрирању случајева
Ево питања које вам је можда већ дуго остало у мислима.
П # 1) Која је разлика између онемогућавања / игнорисања теста и филтрирања теста? Не може ли ниједна од функција да помогне у исту сврху прескакања тест случајева током извршавања?
Одговор: Питање је заиста право и на њега вреди одговорити.
- Помоћу функције тестирања филтрирања можете и да изузмете укључују тестови у зависности од означене категорије. Док, са онемогућавањем, можете одлучити само о искључивању и не укључивању тестова за извршење.
- Филтрирање тест случајева је врста условно прескакања тест случајева, док се у случају Игнорираних тестова они прескачу без услова.
- Још једна значајна разлика између њих две је та што када покренете тестове са тестовима означеним са @Игноре или @Дисаблед - занемарени тестови се приказују у резултатима тестова под СКИППЕД рачунати
- Када покренете филтриране тестове, они се уопште не приказују у резултату теста.
Закључак
У овом упутству научили смо како да филтрирамо тестове додавањем категорије / ознаке тестовима.
У ЈУнит 4 смо сазнали да имамо @Цатегори, @ИнцлудеЦатегори и @ЕкцлудеЦатегори за филтрирање тест случајева, док ЈУнит 5 има @ИнцлудеТагс и @ЕкцлудеТагс да учине исто.
Поред тога, ЈУнит 5 има додатне могућности филтрирања користећи напомене @ИнцлудеПацкагес, @ЕкцлудеПацкагес, као и напомене за укључивање или искључивање класа помоћу образаца имена класа. Што више истражујемо; схватамо да још много тога треба истражити.
=> Овде припазите на једноставну серију тренинга ЈУнит.
Препоручено читање
- ЈУнит Игноре Тест Цасе: ЈУнит 4 @Игноре Вс ЈУнит 5 @Дисаблед
- ЈУнит тестови: Како написати ЈУнит тест случајеве са примерима
- Списак ЈУнит напомена: ЈУнит 4 вс ЈУнит 5
- Водич за ЈУнит за почетнике - шта је ЈУнит тестирање
- Шта је учвршћење ЈУнит теста: Водич за примере ЈУнит 4
- Више начина за извршавање ЈУнит тестова
- Преузмите, инсталирајте и конфигуришите ЈУнит у програму Ецлипсе
- Увод у ЈУнит Фрамеворк и његову употребу у скрипту Селениум - Водич за селен # 11