junit test execution order
Този урок обяснява как да зададете ред за изпълнение за тестови случаи на JUnit. Ще научите за анотации и класове за задаване на JUnit Test Execution Order в JUnit 4 срещу JUnit 5:
Научихме как да създадем тестов пакет, как да добавим категория или маркер към тестовите случаи и как да филтрираме тестове (изключваме или включваме тестовите случаи) въз основа на категорията или маркера в нашия предишен урок.
Освен това научихме, че в JUnit 4 имаме @Category, @IncludeCategory, и @ExcludeCategory за филтриране на тестовите случаи, докато JUnit 5 има @IncludeTags и @ExcludeTags да направи същото.
JUnit 5 има допълнителни опции за филтриране с помощта на анотации @IncludePackages, @ExcludePackages, а също и анотации за включване или изключване на класове, използващи модели на имена на класове.
=> Проверете тук, за да видите A-Z на уроци за обучение на JUnit .
Какво ще научите:
Поръчка за изпълнение на JUnit тест
В този урок ще научим как да зададете ред за всеки тестов случай, така че те да се изпълняват в зададения ред. Ще научим как да поръчате тестове в JUnit 4, както и в JUnit 5.
Методите за тестване не следват определен ред по подразбиране.Тестовите случаи не е задължително да се изпълняват в реда, в който са написани.
Има различни начини или режими за задаване на реда за изпълнение на тестовите случаи. Също така ще се задълбочим в това как JUnit 4 варира при подреждането на тестовите случаи в сравнение с JUnit 5.
JUnit 4: @FixedMethodOrder, Class MethodSorters
Започвайки JUnit 4.11, имаме анотацията @FixMethodOrder и MethodSorters.class подкрепа на съоръжението за определяне на поръчка за изпълнение на тест.
Пакетът org.junit.runners. * трябва да се импортира, за да включи класа MethodSorters . Този клас решава как трябва да бъдат подредени тестовите случаи. MethodSorters имат три преброяване стойности.
По-долу са дадени стойностите на изброяването на класа заедно с целта, която всяка от стойностите служи:
MethodSorters.DEFAULT | Тази стойност на изброяване наистина сортира изпълнението на теста в определен ред. Никога обаче не е предвидимо в какъв ред може да изпълнява тестовите случаи. |
Ето защо вие имате контрол върху решението си кой тест да се стартира първо и кои следва да последват след това. | |
Забелязах, че клас с множество методи, сортирани с DEFAULT enum при изпълнение, поръчката остава същата всеки път по време на изпълнението на теста. | |
Няма начин обаче да предвидя или да разбера начина, по който е зададена поръчката. | |
MethodSorters.JVM | Редът на изпълнение на теста с JVM enum е, както подсказва името, се определя от JVM. |
В този случай всеки път, когато стартирате класа, тестовете ще се изпълняват не в същия, а в произволен ред. | |
С други думи, редът на тестовете се променя по време на всяко изпълнение. | |
MethodSorters.NAME_ASCENDING | Това изброяване сортира тестовите методи в лексикографски ред на името на метода. Следователно може да сте спокойни, тъй като това е най-предсказуемият начин за нареждане на вашето тестово изпълнение. |
Следователно можете да решите предварително последователността на тестовете въз основа на лексикографския ред на името, който сте задали. |
Анотацията @FixedMethodOrder приема входния параметър на MethodSorters със своята изчислена стойност. Пакетът, необходим за анотацията, е org.junit.FixedMethodOrder.
Нека да видим как се прилага чрез кода.
Прилагане на код за MethodSorters.DEFAULT
Нека създадем файл с клас JUnit Junit4TestOrder.java ' къде ще използваме MethodSorters.DEFAULT
Кодът за Junit4TestOrder.java
@FixMethodOrder(MethodSorters.DEFAULT) public class JUnit4TestOrder { @Test public void Testcase_3() { System.out.println('Testcase_3 executes'); } @Test public void Testcase_1() { System.out.println('Testcase_1 executes'); } @Test public void Testcase_2() { System.out.println('Testcase_2 executes '); } }
Изпълняваме класа три пъти и виждаме същия ред от тестове, които се изпълняват както по-долу, но тестовите случаи могат или не могат да бъдат изпълнени в сортирания ред.
Прозорецът на конзолата показа резултатите, както е показано по-долу - редът на изпълнение на теста е TestCase_3, TestCase_1 и TestCase_2 и редът не се променя с броя на изпълненията.
Прилагане на код за MethodSorters. JVM
Сега ще актуализираме ‘Junit4TestOrder.java’, за да го имаме MethodSorters.JVM
Кодовият фрагмент за Junit4TestOrder.java
@FixMethodOrder(MethodSorters . JVM ) public class JUnit4TestOrder {
Изпълняваме класа два пъти и редът на изпълнение на тестовете се променя при всяко изпълнение.
Прозорецът на конзолата за първо изпълнение е както е показано по-долу:
Прозорецът на конзолата за второ изпълнение е както е показано по-долу:
Наблюдавайте внимателно промяната в реда, в който се изпълняват тестовете и в двата цикъла. Редът на тестовете в двете серии се различава.
Внедряване на код за MethodSorters.NAME_ASCENDING
Сега ще актуализираме ‘Junit4TestOrder.java’, за да го имаме MethodSorters.NAME_ASCENDING
Кодовият фрагмент за Junit4TestOrder.java
@FixMethodOrder(MethodSorters.NAME_ASCENDING) public class JUnit4TestOrder {
Изпълняваме класа два пъти, редът на изпълнените тестове остава същият и се изпълнява по възходящ ред на името на метода.
Прозорецът на конзолата показва резултата от тестовете, изпълнени по реда TestCase_1, TestCase_2 и TestCase_3.
JUnit 5: @TestMethodOrder, @Order, Interface MethodOrderer
За да контролирате реда на изпълнение на тестовете, следните обекти помагат да се направи същото:
- Анотацията @TestMethodOrder
- Анотацията @Order
- Класовете, които принадлежат към интерфейсите на MethodOrderer
Вградените класове MethodOrderer и техните подробности са както по-долу:
MethodOrderer е вграден в клас | От опаковката | Подробности |
---|---|---|
Буквено-цифрови | org.junit.jupiter.api.MethodOrderer.Alfhanumeric | Сортира методите за тестване буквено-цифрово въз основа на техните имена |
Анотация | org.junit.jupiter.api.MethodOrderer.OrderAnnotation | Сортира методите за тестване числено въз основа на стойностите, предадени на пояснението @Order |
Случайни | org.junit.jupiter.api.MethodOrderer.Random | Сортира методите за тестване на случаен принцип, точно както в случая MethodSorters.JVM в JUnit 4 |
Нека сега разгледаме демонстрацията на всяка от тези стратегии за поръчки:
Прилагане на код за буквено-цифров.клас
Нека създадем файл с клас JUnit 5, наречен JUnit5TestOrder.java, същият като JUnit4TestOrder.java и нека използваме анотацията с Alphanumeric.class, за да подредим тестовете буквено-цифрово.
Кодът за Junit5TestOrder.java
@TestMethodOrder(Alphanumeric.class) public class JUnit5TestOrder { @Test public void Testcase_3() { System.out.println('Testcase_3 executes'); } @Test public void Testcase_1() { System.out.println('Testcase_1 executes'); } @Test public void Testcase_2() { System.out.println('Testcase_2 executes '); } }
Изпълнихме класа три пъти и все още виждаме същия ред тестове, които се изпълняват в буквено-цифрово сортиран ред на името на метода на теста.
След изпълнение на файла на класа, редът на тестовото изпълнение:
- Testcase_1,
- Testcase_2 и
- Testcase_3
Забележка: Буквено-цифровата стратегия за сортиране е чувствителен към малки и големи букви така че в случай, че имахме друг тестов случай с името testcase_1.
Редът на изпълнение ще бъде:
- Testcase_1,
- Testcase_2,
- Testcase_3,
- testcase_1.
Следователно горният регистър има приоритет пред имената на методите с малки букви.
Прилагане на код за Random.class
Сега ще актуализираме JUnit 5 клас JUnit5TestOrder.java, за да използваме анотацията с Random.class
Кодовият фрагмент за Junit5TestOrder.java
@TestMethodOrder (Random.class) public class JUnit5TestOrder {
Изпълнихме класа два пъти и видяхме, че всеки път, когато провеждахме класа, редът на тестовото изпълнение беше подреден произволно.
След изпълнение на файла на класа за първи път , редът на изпълнение на теста беше:
- Testcase_2,
- Testcase_1
- Testcase_3
Редът на изпълнение при изпълнение на второ времето показа:
- Testcase_2,
- Testcase_3
- Testcase_1 .
Прилагане на код за OrderAnnotation.class
Сега ще актуализираме JUnit 5 клас JUnit5TestOrder.java, за да използваме анотацията с OrderAnnotation.class. Анотацията @Поръчка също ще играе важна роля в определянето на приоритета на методите за тестване тук.
Кодовият фрагмент за Junit5TestOrder.java
@TestMethodOrder(OrderAnnotation.class) public class JUnit5TestOrder { @Test @Order(1) public void Testcase_3() { System.out.println('Testcase_3 executes'); } @Test @Order(2) public void Testcase_1() { System.out.println('Testcase_1 executes'); } @Test @Order(3) public void Testcase_2() { System.out.println('Testcase_2 executes '); } }
И така, в тази стратегия за настройка на реда за изпълнение на теста, анотацията @Order налага тестовите методи, които да се изпълняват според стойност на поръчката се настройва за него.
Колкото по-ниска е стойността на @Order за тестов метод, толкова по-висок е неговият приоритет по време на изпълнение.
След изпълнение, редът на тестовете се изпълнява, както следва:
- Testcase_3,
- Testcase_1
- Testcase_2, защото редът, зададен за тестовите случаи, е съответно 1,2 и 3.
Ето защо няма значение дали тестовите случаи са написани в ред. Освен това няма значение дали имената на методите са или не са в буквено-цифров ред.
JUnit 5: Създаване на поръчка по поръчка
Освен това, вградените класове за поръчки, JUnit 5 също поддържа потребителски поръчки чрез внедряване на интерфейса MethodOrderer . Започвайки от JUnit 5 версия 5.4, поддържа се персонализирано сортиране.
Нека да видим бързо как да създадем и внедрим персонализиран ред по дължина на метода.
Етап 1: Създаде клас по поръчка, изпълняващ интерфейс MethodOrderer и нарече класа като TestCaseLengthOrder
Кодът за TestCaseLengthOrder.java
public class TestCaseLengthOrder implements MethodOrderer { @Override public void orderMethods(MethodOrdererContext context) { MethodDescriptor md1; MethodDescriptor md2; context.getMethodDescriptors().sort((md1, md2)-> md1.getMethod().getName().length().compareTo(md2.getMethod().getName().length())); } }
Обяснение на кода TestCaseLengthOrder:
- Клас по поръчка по поръчка се създава чрез прилагане на интерфейса MethodOrderer.
- void orderMethods (MethodOrderContext context) {} метод, който е вграденият метод, реализиран от Interface MethodOrderer. Тук дефинирате изпълнението на тестовата логика за подреждане.
- MethodDescriptor е интерфейс, който включва подробности за метод:
- Методът MethodDescriptor.getMethod () получава името на метода за този дескриптор.
- Името на метода се преобразува в String с метода getName (), т.е. MethodDescriptor.getMethod (). GetName () и
- Методът length () извлича дължината на метода (точно както string.length () извлича дължината на стойност на низ).
- Всички имена на методи се сравняват помежду си, използвайки метода compareTo ().
- Методът getMethodDescriptors () получава списъка с всички дескриптори на метода в клас.
- Методът sort () сортира обектите MethodDescriptor.
Сега, след като разбрахме ясно всеки API на MethodOrderer, се надяваме, че е лесно да интерпретираме горния код.
Стъпка 2 : Използвайте потребителския клас на поръчка, както използвате всеки вграден ред в тестовия клас.
Като вход към анотацията @TestMethodOrder.
Кодът за JUnit_CustomOrder.java
@TestMethodOrder(TestCaseLengthOrder.class) class JUnit_CustomOrder{ @Test public void subt(){ } @Test public void add(){ } @Test public void multiply(){ } @Test public void divide(){ }
Стъпка 3:
След изпълнение на JUnit_CustomOrder.class , редът на изпълнение на теста е както следва възходящ ред на дължината на името на тестовите случаи:
- add (),
- subt (),
- разделям ()
- умножавам ()
Заключение
За да завърша този урок за JUnit Test Execution Order.
- Научихме как да зададем реда на тестовите случаи, използвайки конкретни анотации, както и конкретни класове.
- Също така научихме различни начини за поръчка на тестове за JUnit 4 и JUnit 5, въз основа на които се променяха стратегиите за поръчка.
- Освен това научихме как в JUnit 5 можем също да създадем персонализиран клас за сортиране и да го използваме за подреждане на тестовите случаи по време на тяхното изпълнение.
=> Погледнете тук ръководството за начинаещи JUnit.
Препоръчително четене
- JUnit тестове: Как да напиша JUnit тестови случаи с примери
- Списък на анотациите на JUnit: JUnit 4 срещу JUnit 5
- JUnit Ignore Test Case: JUnit 4 @Ignore Vs JUnit 5 @Disabled
- JUnit Test Suite и тестови случаи за филтриране: JUnit 4 Vs JUnit 5
- Какво е приспособление за тестване на JUnit: Урок с примери за JUnit 4
- Урок за JUnit за начинаещи - какво е тестване на JUnit
- Няколко начина за изпълнение на JUnit тестове
- Как да стартирате паралелно мащабно изпълнение на тестове на Appium