首页 > 解决方案 > JUnit 5 具有相同参数的多个参数化测试 - 迁移参数化

问题描述

以前在 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 } 
    }
}

这将通过数组,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 } 
    }
}

您必须为每个单独的测试重复参数和数据源。有没有办法像在 JUnit4 中那样做类似的事情,其中​​参数化测试在使用不同参数实例化的类的实例上工作?

标签: javatestingjunitmigrationjunit5

解决方案


(评论摘要)

当前(版本 5.3.2 和 5.4.0-M1)不支持对测试类中的所有/多个方法重用相同的参数。但这已经是 JUnit 团队正在处理的请求,请参阅


推荐阅读