В этой статье показано, как управлять порядком выполнения теста блока 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 Comparator comparator =
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/”