junit test suite filtering test cases
Този урок ще обсъди какво е JUnit Test Suite, как да създадете тестов пакет и как да филтрирате тестовите случаи в JUnit 4 срещу JUnit 5:
Научихме как да пропуснем определени тестови случаи по време на изпълнение в нашия предишен урок. Също така научихме за различни анотации, използвани в JUnit 4 и JUnit 5 за това.
В този урок ще научим:
- Какво е тестов пакет?
- Как да създадем тестов пакет, като съберем множество тестови случаи в група и изпълним пакета, използвайки клас JUnitCore?
=> Посетете тук за ексклузивната поредица за обучение на JUnit.
Какво ще научите:
JUnit Test Suite
JUnit 4: @RunWith, @SuiteClasses Анотации
Урокът Няколко начина за изпълнение на JUnit тестове илюстрира как да създадете тестов пакет в JUnit 4.
Анотациите @RunWith и @SuiteClasses ни помогна да създадем тестов пакет чрез групиране на множество JUnit тестови класове. Впоследствие файл за изпълнение с клас JUnitCore.runclasses () извика изпълнението на създадения тестов пакет.
Моля, обърнете се към споменатия раздел за всички подробности за работния процес заедно с действителния код за JUnit 4.
JUnit 5: @RunWith, @SelectClasses, @SelectPackages Анотации
Създаването на тестов пакет в JUnit 5 е доста подобно на това, което имаме в JUnit 4. И така, къде е разликата тогава?
# 1) В JUnit 4 , имаме Suite.class, който се предава като параметър на @RunWith анотация, за да поддържа създаването на тестов пакет, докато JUnit 5 използва същата анотация @RunWith, но с входния параметър като JUnitPlatform.class вместо Suite.class .
И така, редът на кода в JUnit 5 изглежда така @RunWith (JUnitPlatform.class). Това е пояснението, което се доставя в комплекта с вашия подпроект JUnit Platform.
# две) В JUnit 4 , ние използваме @SuiteClasses за групиране на множество класове JUnit, разделени със запетая, докато сте в JUnit 5 ние имаме:
- Анотацията @SelectClasses това е еквивалентно на @SuiteClasses в JUnit 4 за групиране на множество класове JUnit.
- @SelectPackages анотацията се използва за групиране на множество тестове от пакета (ите). Трябва да въведете стойност на масив от низове, която представлява пакета, който искате да включите.
По този начин, с други думи,
- Ако в случай, че искате да групирате тестови случаи от един пакет, JUnit 5 ви позволява да направите това.
- Или в случай, че искате да групирате тестови случаи от множество пакети, JUnit 5 поддържа, че правите и това. Забележка, която трябва да запомните тук, е, че тестовете във всички подпакети на споменатия пакет също се включват по подразбиране в тестовия пакет.
JUnit 5: Различни сценарии / примери
Създаване на Test Suite, групиращо няколко тестови класа
Фрагментът на кода е показан по-долу:
@RunWith(JUnitPlatform.class) @SelectClasses({JUnit5TestCase1.class, JUnit5TestCase2.class }) public class JUnitTestSuite { }
Създаване на тестов пакет за единичен пакет
Фрагментът на кода е показан по-долу:
@RunWith(JUnitPlatform.class) @SelectPackages({“ demo.tests “}) public class JUnit5TestSuite { }
Забележка :
- Казвам демо.тестове пакет има подпакет demo.tests.subtests.
- Кодът @SelectPackages ({„demo.tests“}) ще включва всички тестове в подпакета също в тестовия пакет; по подразбиране.
- Ако бяхте заявили @SelectPackages ({„demo.tests.subtests“}) , тестовите случаи по подпакета demo.tests.subtests ще бъдат включени само в тестовия пакет, докато тестовете от неговия родителски пакет, т.е. демо.тестове не би било включено.
Създаване на тестов пакет за множество пакети
Кодовият фрагмент за създаване на тестов пакет за множество пакети разделени със запетая в JUnit 5 - ще изглеждат, както е показано по-долу:
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests”, “demo1.tests”, “demo2.tests”}) public class JUnit5TestSuite { }
Тестване за филтриране - JUnit 4 срещу JUnit 5
Понякога трябва да филтрираме тестови случаи и да изпълним определен набор от тестове според нашите нужди. Например може да има набор от тестове, идентифицирани за регресионно тестване, отделен набор за тестване на единица и отделен набор от тестови случаи за тестване на дим.
Трябва да изключим или включим тестови случаи от определени пакети или класове или категории. Филтрирането или маркирането на тестовете от един пакет е единствената опция с JUnit4.
В сравнение с JUnit 4, JUnit 5 се предлага с добър набор от функции за поддържане на тази нужда от филтриране на вашите тестови случаи от един пакет или множество пакети и подпакети според променящите се изисквания.
JUnit 4 - @Category, @IncludeCategory, @ExcludeCategory
Тестовите случаи в JUnit 4 могат да бъдат категоризирани в различни категории. Тези категории могат да бъдат изключени или включени, докато стартирате вашия тестов пакет. Анотациите @Category, @IncludeCategory и @ExcludeCategory се поддържат от JUnit 4.12 и по-нови.
Стъпките на високо ниво за създаване на филтри въз основа на категорията или категориите са както следва:
# 1) Създайте интерфейс за маркер, който играе роля в категорията.
# две) Коментирайте методите за тестване на класовете, които ще бъдат включени в SuiteClasses с @ Категория и името на категорията.
# 3) В файла на тестовия пакет използвайте анотация @IncludeCategory с името на категорията, за да се включат тестовете, принадлежащи към определена категория.
# 4) В файла на тестовия пакет използвайте анотация @ExcludeCategory с името на категорията за изключването им.
# 5) Анотацията @Category може да се използва и на ниво тест или на ниво клас. Ако анотацията се прилага на ниво тест, тогава този конкретен тест се маркира с дадената категория, докато ако анотацията е на ниво клас, всички тестове в класа са маркирани към дадената категория.
Нека да разгледаме още подробности, за да разберем практическото изпълнение на категоризирането на тестовете и филтрирането им за изпълнение:
Етап 1:
Ще започнем със създаването на интерфейс на маркер който ще играе ролята на а категория за методи за изпитване. Тук създаваме категория с име UnitTest . Кодът е много прост. Моля, вижте кода по-долу.
Код за UnitTest.java
package demo.tests; public interface UnitTest {}
Стъпка 2:
Ще маркираме категорията в ниво на метод за изпитване в час JUnitTestCase1.java . За да добавим тестовия случай junitMethod1 () в категорията UnitTest, трябва да анотираме тестовия метод с @Category (UnitTest.class) .
Това добавя тестовия метод към категорията UnitTest. Другите методи за изпитване (ако има такива) не са маркирани към категорията, освен ако методите не са отбелязани с категория.
За да работи анотация @Category в нашия код, трябва да импортираме пакета org.junit.experimental.categories.Category
Кодовият фрагмент от JUnitTestCase1.java:
@Category(UnitTest.class) @Test public void junitMethod1(){ int Value2=9000; Assert. assertEquals (Value1, Value2); }
Алтернативно методът за тестване също може да принадлежи към множество категории E.g. : @Category (UnitTest.class, SmokeTest.class)
Стъпка 3:
Сега бих маркирал категорията на ниво клас в час JUnitTestCase2.java . Същото изявление, което е добавено на ниво тест метод в по-ранната стъпка, ще бъде добавено и в текущия файл на класа.
Имайте предвид, че тук ще добавим изявлението на ниво клас. Това ще направи всички тестови методи във файла да принадлежат на UnitTest Категория.
Кодовият фрагмент от JUnitTestCase2.java:
@Category(UnitTest.class) @Test public class JUnitTestCase2 { public String stringValue='JUnit';
Стъпка 4:
основните въпроси за интервю за Java с отговори
След като нашите необходими тестови случаи бяха категоризирани в категорията UnitTest, сега ще видим как да ги добавим в тестовия пакет, като ги филтрираме въз основа на категорията. Ще направим определени промени в кода в JUnitTestSuite.class за да демонстрира това.
- Категории.клас ще бъде предаден като параметър на анотацията @RunWith.
- @ Suite.SuiteClasses ще вземе масив от низове на тестовите класове.
- Анотацията @ Categories.IncludeCategory ще се нуждае от UnitTest.class като параметър.
- Това изявление ще ни помогне да филтрираме целия пакет и да стартираме само тези тестови случаи от пакета, който принадлежи към категорията.
- Категория.клас се нуждае от пакет org.junit.experimental.categories.Категории да се внасят.
Кодовият фрагмент за JunitTestSuite.java
@RunWith(Categories.class) @Categories.IncludeCategory(UnitTest.class) @Suite.SuiteClasses({JUnitTestCase1.class, JUnitTestCase2.class}) public class JUnitTestSuite {
Анотацията @ Categories.IncludeCategory може да се запише и като @IncludeCategory. Можете също така да създадете множество интерфейси (категории) и да коментирате методите клас / тест с множество категории, разделени със запетая. Примерът по-долу ще филтрира тестовете, принадлежащи към категория - Категория1 и Категория2.
Пример: @IncludeCategory ({Категория1.клас, Категория2.клас})
Подобни правила вървят с @ Categories.ExcludeCategory / @ExcludeCategory за изключване на методите за изпитване в категорията или категориите по време на пробното изпълнение.
JUnit 5 - @IncludeTags, @ExcludeTags, @IncludePackages, @ExcludePackages, @IncludeClassNamePatterns, @ExcludeClassNamePatterns
JUnit 5 се предлага с множество подходи за организиране и филтриране на тестовите случаи.
JUnit 5 - @IncludeTags, @ExcludeTags
# 1) Подобно на JUnit 4 има анотации @IncludeCategory и @ExcludeCategory, които поддържат филтриране на тестови случаи за изпълнение.
# две) JUnit 5 има анотации @IncludeTags и @ExcludeTags за постигане на същата цел.
# 3) JUnit 4 се отнася до тестовите случаи, които трябва да бъдат организирани в определена категория, докато JUnit 5 се отнася до маркиране на тестовите случаи със специфичен етикет, за да се позволи филтриране на тестовите случаи за изпълнение.
Стъпките на високо ниво за създаване на филтри въз основа на таговете са както следва:
- Анотирайте методите за тестване на пакета (ите), които да бъдат включени в @SelectPackages с @Tag и дефинираното от потребителя име на маркера. Един клас може да има различни маркери за различни методи на тестване.
- Можете също да коментирате @Tag на ниво клас, така че всички тестове в класа да са маркирани.
- В файла на тестовия пакет използвайте анотация @IncludeTags с името на маркера, за да включва тестовете, принадлежащи на определен маркер.
- В файла на тестовия пакет използвайте анотация @ExcludeTags с името на маркера за изключването им от тестовия пакет.
Нека сега имаме подробна илюстрация за това как на практика да се приложи филтриране в JUnit 5.
Етап 1 : Маркираме тестов метод в JUnit5TestCase1.java към името на маркера „Регресия“
Кодовият фрагмент от JUnit5TestCase1.java:
@Tag(“Regression”) @Test public void junitMethod1(){
Стъпка 2 : Маркираме тестов метод в JUnit5TestCase2.java към името на маркера „SmokeTest“.
Кодовият фрагмент от JUnit5TestCase2.java:
@Tag(“SmokeTest”) @Test public void junitMethod2(){
Стъпка 3: След като тестовите методи са маркирани, сега ще актуализираме JUnit5TestSuite.java, за да добавим подходящи филтри по маркери за тестовете. Кодът по-долу включва всички тестове, които са маркирани като „Регресия“ и изключват всички, маркирани като „SmokeTest“.
Кодовият фрагмент от JUnit5TestSuite.java:
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @IncludeTags(“Regression”) @ExcludeTags(“SmokeTest”) public class JUnit5TestSuite { }
JUnit 5 - @IncludePackages, @ExcludePackages
Вече знаем, че когато предадем име на пакет в @SelectPackages анотация, тестовете в подпакетите на пакета също се добавят към тестовия пакет.
Може да има някои подпакети, които искаме да включим в нашия тестов пакет, докато няколко други подпакета, които не желаем или може да не са от значение, да бъдат включени в нашия пакет.
Това се улеснява чрез анотациите @IncludePackages и @ExcludePackages в JUnit 5.
Да приемем, че имаме пакет „demo.tests“, който има три подпакета, т.е. subpackage1, subpackage2 и subpackage 3, със своите тестови класове във всеки от пакетите по-долу.
Нека видим кодов фрагмент на JUnit5TestSuite.java, за да визуализираме как да включваме и изключваме пакет.
Сценарий # 1: Приложи филтър, за да включи тестови случаи само от подпакет1.
Кодът по-долу включва всички тестове от всички класове JUnit в пакета demo.tests.subpackage1, но изключва всички тестове директно под пакета demo.test и тези под пакета2 и подпакет3 на пакета.
Кодовият фрагмент от JUnit5TestSuite.java:
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @IncludePackages(“demo.tests.subpackage1”) public class JUnit5TestSuite { }
Сценарий # 2: Приложете филтър, за да изключите тестовите случаи само от подпакета3 на пакета.
Кодът по-долу изключва всички тестове от класовете JUnit в пакета - demo.tests.subpackage3, но пакетът включва всички тестове директно под пакета demo.test и тези под пакета1 и подпакет2.
Кодовият фрагмент от JUnit5TestSuite.java:
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @ExcludePackages(“demo.tests.subpackage3”) public class JUnit5TestSuite { }
JUnit 5 - @IncludeClassNamePatterns, @ExcludeClassNamePatterns
Когато искате да включите или изключите определени класове, съответстващи на определен регулярен израз от пакета, поясненията @ IncludeClassNamePatterns и @ ИзключетеClassnamePatterns може да се използва във файла на класа на тестовия пакет.
Нека сега видим илюстрацията чрез актуализацията на кода в JUnit5TestSuite.java
Сценарий # 1:
Кодът по-долу включва класове, които завършват с „Ctests“ от пакета demo.tests
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @IncludeClassNamePatterns({'^.*CTests?$'})
Сценарий # 2:
Сега ще изключим тези класове, които инициирам със ‘STest’ от пакета demo.tests
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @ExcludeClassNamePatterns({'^STest.*$'})
Сценарий # 3:
Множество регулярни изрази също могат да бъдат предадени като критерии за филтриране. Кодът по-долу посочва два различни регулярни израза, разделени с ‘ ИЛИ ' оператор. Прорезната лента | е операторът OR.
как да отворите .apk файл в Windows
Кодът филтрира класове иницииране с Тест ( Тест.*) или завършващ с Тестове (*. Тестове?) и включва тези класове в тестовия пакет, тъй като се използва анотация @IncludeClassNamePatterns.
Забележка: Ако напълно квалифицираното име на класа съвпада с поне един шаблон, тогава класът ще бъде извлечен според анотацията @IncludeClassNamePatterns или @ExcludeClassNamePatterns.
@RunWith (JUnitPlatform.class)
@SelectPackages ({„demo.tests“})
@IncludeClassNamePatterns (. * Тестове?) $ ”)
Често задавани въпроси за тестовите случаи за филтриране на JUnit
Ето въпрос, който може би ви е останал в съзнанието от доста време.
В # 1) Каква е разликата между деактивирането / игнорирането на тест и филтрирането на тест? Не може ли някоя от функциите да помогне за една и съща цел на пропускане на тестови случаи по време на изпълнение?
Отговор: Въпросът наистина е истински и си заслужава да се отговори.
- С тестовата функция за филтриране можете да изключите както включва тестове в зависимост от маркираната категория. Докато при деактивиране можете да решите само да изключвате и да не включвате тестове за изпълнение.
- Филтрирането на тестовите случаи е вид условно пропускане на тестовия случай, докато в случай на игнорирани тестове те се пропускат без условия.
- Друга съществена разлика между двете е, че когато стартирате тестовите случаи с тестове, анотирани с @Ignore или @Disabled - игнорираните тестове се показват в резултатите от теста под ПРЕКРАТЕН броя
- Когато стартирате филтрираните тестове, те изобщо не се показват в резултата от теста.
Заключение
В този урок научихме как да филтрираме тестовете, като добавихме категория / маркер към тестовете.
Научихме в JUnit 4, че имаме @Category, @IncludeCategory и @ExcludeCategory за филтриране на тестовите случаи, докато JUnit 5 има @IncludeTags и @ExcludeTags да направят същото.
Освен това JUnit 5 има допълнителни опции за филтриране, използвайки анотации @IncludePackages, @ExcludePackages, както и анотации за включване или изключване на класове, използващи модели на имена на класове. Колкото повече изследваме; осъзнаваме, че има още много какво да се проучи.
=> Внимавайте тук за простите серии за обучение JUnit.
Препоръчително четене
- JUnit Ignore Test Case: JUnit 4 @Ignore Vs JUnit 5 @Disabled
- JUnit тестове: Как да напиша JUnit тестови случаи с примери
- Списък на анотациите на JUnit: JUnit 4 срещу JUnit 5
- Урок за JUnit за начинаещи - какво е тестване на JUnit
- Какво е приспособление за тестване на JUnit: Урок с примери за JUnit 4
- Няколко начина за изпълнение на JUnit тестове
- Изтеглете, инсталирайте и конфигурирайте JUnit в Eclipse
- Въведение в JUnit Framework и нейното използване в Selenium Script - Селен Урок # 11