我有以下 JUnit 4 测试:
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import java.util.Arrays;
import java.util.Collection;
@RunWith(Parameterized.class)
public class LocaleTest {
@Parameterized.Parameters(name = "{index}: Locale={0}, valid={1}")
public static Collection<Object[]> opt() {
Object[][] options = new Object[][]{{"os_PT", true}, {"en_PH", true}......};
return Arrays.asList(options);
}
}
我需要将其迁移到 JUnit 5:
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.runners.Parameterized;
import java.util.Arrays;
import java.util.Collection;
@ExtendWith(Parameterized.class)
public class LocaleTest {
@Parameterized.Parameters(name = "{index}: Locale={0}, valid={1}")
public static Collection<Object[]> opt() {
Object[][] options = new Object[][]{{"os_PT", true}, {"en_PH", true}......};
return Arrays.asList(options);
}
}
但是我收到错误:
Incompatible types. Found: 'java. lang. Class<org. junit. runners. Parameterized>', required: 'java. lang. Class<? extends org. junit. jupiter. api. extension. Extension>[]'
在这一行:
@ExtendWith(Parameterized.class)
你知道我如何正确迁移这段代码吗?
现在不需要
@RunWith
或 @ExtendWith
,只需:
class MyTests {
@ParameterizedTest
@MethodSource("parameterSource")
void doit(String s, int i){
assertEquals(s, Integer.toString(i));
}
public static Stream<Arguments> parameterSource() {
return Stream.of(
Arguments.of("1", 1),
Arguments.of("2", 2)
);
}
}
有多个可用的
*Source
注释。