在参数化测试类中排除非参数测试,可以通过以下方法实现:
@ParameterizedTest
注解:在测试类中使用@ParameterizedTest
注解,这样只有使用@ValueSource
、@EnumSource
或@CsvSource
等注解提供的参数化测试方法才会被执行。@TestInstance
注解:在测试类上使用@TestInstance
注解,并将PER_CLASS
作为参数传递给该注解。这样可以确保测试类中的所有方法都只被执行一次,而不是每个参数化测试方法都执行一次。@Nested
注解:在测试类中使用@Nested
注解,将参数化测试方法放在嵌套类中。这样可以将参数化测试方法与非参数测试方法分开,确保非参数测试方法不会被执行。@Tag
注解:在非参数测试方法上使用@Tag
注解,并为其添加一个标签,例如"non-parameterized"
。然后,在测试运行器中排除具有该标签的方法。例如,以下是一个使用JUnit 5编写的测试类,其中排除了非参数化测试方法:
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
public class ParameterizedTestExample {
@ParameterizedTest
@ValueSource(ints = {1, 2, 3})
void parameterizedTest(int value) {
System.out.println("Parameterized test: " + value);
}
@Test
@Tag("non-parameterized")
void nonParameterizedTest() {
System.out.println("Non-parameterized test");
}
@Nested
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class NestedTest {
@ParameterizedTest
@ValueSource(ints = {4, 5, 6})
void nestedParameterizedTest(int value) {
System.out.println("Nested parameterized test: " + value);
}
@Test
@Tag("non-parameterized")
void nestedNonParameterizedTest() {
System.out.println("Nested non-parameterized test");
}
}
}
在上面的示例中,parameterizedTest
方法是一个参数化测试方法,而nonParameterizedTest
方法是一个非参数化测试方法。NestedTest
类是一个嵌套类,其中包含两个参数化测试方法和一个非参数化测试方法。通过使用@Nested
、@TestInstance
和@Tag
注解,可以确保只有参数化测试方法被执行。
领取专属 10元无门槛券
手把手带您无忧上云