В этой статье показано, как управлять порядком выполнения теста блока 5 с помощью следующих классов Порядок методов
:
- Буквенно-цифровой
- Аннотация заказа
- Случайный
- Индивидуальный заказ
P.S Протестировано с JUnit 5.5.2
1. Буквенно-цифровой
1.1 Он сортирует методы испытаний в алфавитно-цифровом порядке.
package com.mkyong.order; import org.junit.jupiter.api.MethodOrderer; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestMethodOrder; import static org.junit.jupiter.api.Assertions.assertEquals; @TestMethodOrder(MethodOrderer.Alphanumeric.class) public class MethodAlphanumericTest { @Test void testZ() { assertEquals(2, 1 + 1); } @Test void testA() { assertEquals(2, 1 + 1); } @Test void testY() { assertEquals(2, 1 + 1); } @Test void testE() { assertEquals(2, 1 + 1); } @Test void testB() { assertEquals(2, 1 + 1); } }
Выход
testA() testB() testE() testY() testZ()
2. Аннотация заказа
2.1 Он сортирует методы тестирования на основе значений @Order
.
package com.mkyong.order; import org.junit.jupiter.api.MethodOrderer; import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestMethodOrder; import static org.junit.jupiter.api.Assertions.assertEquals; @TestMethodOrder(MethodOrderer.OrderAnnotation.class) public class MethodOrderTest { @Test void test0() { assertEquals(2, 1 + 1); } @Test @Order(3) void test1() { assertEquals(2, 1 + 1); } @Test @Order(1) void test2() { assertEquals(2, 1 + 1); } @Test @Order(2) void test3() { assertEquals(2, 1 + 1); } @Test void test4() { assertEquals(2, 1 + 1); } }
Выход
test2() test3() test1() test0() test4()
3. Случайный
3.1 Он сортирует методы тестирования псевдослучайно и поддерживает настройку пользовательского исходного кода:
junit.jupiter.execution.order.random.seed
package com.mkyong.order; import org.junit.jupiter.api.MethodOrderer; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestMethodOrder; import static org.junit.jupiter.api.Assertions.assertEquals; @TestMethodOrder(MethodOrderer.Random.class) public class MethodRandomTest { @Test void testZ() { assertEquals(2, 1 + 1); } @Test void testA() { assertEquals(2, 1 + 1); } @Test void testY() { assertEquals(2, 1 + 1); } @Test void testE() { assertEquals(2, 1 + 1); } @Test void testB() { assertEquals(2, 1 + 1); } }
Вывод, случайный.
# Run 1 testA() testZ() testE() testY() testB() # Run 2 testY() testE() testZ() testA() testB() # Run 3 testA() testB() testY() testE() testZ()
3.2 Настройте пользовательское начальное значение junit.jupiter.execution.order.random.seed
для создания повторяемых тестовых сборок
В файле свойств.
junit.jupiter.execution.order.random.seed=99
В Maven параметры конфигурации
org.apache.maven.plugins maven-surefire-plugin 3.0.0-M3 junit.jupiter.execution.order.random.seed=99
В Gradle параметры конфигурации
test { useJUnitPlatform() systemProperties = [ 'junit.jupiter.execution.order.random.seed': 99 ] }
Запустите его снова с пользовательским семенем.
# Run 1 - seed 99 testA() testZ() testE() testY() testB() # Run 2 - seed 99 testA() testZ() testE() testY() testB() # Run 3 - seed 99 testA() testZ() testE() testY() testB()
4. Индивидуальный заказ
4.1 Реализует Порядок метода
для создания пользовательского порядка тестирования.
4.2 Ниже приведен пример упорядочения по количеству параметров.
package com.mkyong.order; import org.junit.jupiter.api.MethodDescriptor; import org.junit.jupiter.api.MethodOrderer; import org.junit.jupiter.api.MethodOrdererContext; import java.util.Comparator; public class ParameterCountOrder implements MethodOrderer { private Comparatorcomparator = Comparator.comparingInt(md1 -> md1.getMethod().getParameterCount()); @Override public void orderMethods(MethodOrdererContext context) { context.getMethodDescriptors().sort(comparator.reversed()); } }
4.3 Протестируйте вышеуказанный пользовательский заказ с помощью @parameterizedtest
package com.mkyong.order; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.TestMethodOrder; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.CsvSource; import org.junit.jupiter.params.provider.ValueSource; import java.math.BigDecimal; import static org.junit.jupiter.api.Assertions.assertTrue; @TestMethodOrder(ParameterCountOrder.class) public class MethodParameterCountTest { @DisplayName("Parameter Count : 2") @ParameterizedTest(name = "{index} ==> fruit=''{0}'', qty={1}") @CsvSource({ "apple, 1", "banana, 2" }) void test2(String fruit, int qty) { assertTrue(true); } @DisplayName("Parameter Count : 1") @ParameterizedTest(name = "{index} ==> ints={0}") @ValueSource(ints = {1, 2, 3}) void test1(int num1) { assertTrue(num1 < 4); } @DisplayName("Parameter Count : 3") @ParameterizedTest(name = "{index} ==> fruit=''{0}'', qty={1}, price={2}") @CsvSource({ "apple, 1, 1.99", "banana, 2, 2.99" }) void test3(String fruit, int qty, BigDecimal price) { assertTrue(true); } }
Выход
4.4 Снимите компаратор.обратный()
public class ParameterCountOrder implements MethodOrderer { //... @Override public void orderMethods(MethodOrdererContext context) { //context.getMethodDescriptors().sort(comparator.reversed()); context.getMethodDescriptors().sort(comparator); } }
Выход
Скачать Исходный Код
Рекомендации
Оригинал: “https://mkyong.com/junit5/junit-5-test-execution-order/”