Tod*_*ell 6 java migration testing junit junit5
以前在 JUnit4 中,您可以执行以下操作:
@RunWith(Parameterized.class)
public class MyTest
{
private final int number;
public MyTest(int number) {
this.play = play;
}
@Test
public void testIsEven() {
assertEquals(true, number % 2 == 0);
}
@Test
public void testIsNotOdd() {
assertEquals(false, number % 2 != 0);
}
@Parameterized.Parameters
public static int[] data() {
return new int[] { 2, 4, 6 }
}
}
Run Code Online (Sandbox Code Playgroud)
这将遍历数组,MyTest使用每个值实例化,然后在每个实例上运行所有测试。有关更多详细信息,请参阅参数化文档。
现在在 JUnit5 中,事情发生了变化,根据新文档,您必须像这样编写相同的测试:
public class MyTest {
@ParameterizedTest
@MethodSource("data")
public void testIsEven(int number) {
assertEquals(true, number % 2 == 0);
}
@ParameterizedTest
@MethodSource("data")
public void testIsNotOdd(int number) {
assertEquals(false, number % 2 != 0);
}
public static int[] data() {
return new int[] { 2, 4, 6 }
}
}
Run Code Online (Sandbox Code Playgroud)
您必须为每个单独的测试重复参数和数据源。有没有办法做一些类似于 JUnit4 的事情,在 JUnit4 中,参数化测试对使用不同参数实例化的类的实例起作用?
截至今天(JUnit 5.3.2 或 5.4.0-M1),似乎还没有。
我尝试创建一个Extension来处理这种情况,但测试类实例化发生在TestTemplateInvocationContextProvider考虑扩展之前。
因此,同一个测试类似乎不可能有多个实例化上下文。
您当然可以通过在JUnit5 github 存储库上提出问题来向核心团队询问这一问题。
| 归档时间: |
|
| 查看次数: |
3382 次 |
| 最近记录: |