猿问

具有多个方法源的 JUnit5 参数化测试

我有 4 个测试,每个测试都有自己的方法源,但它们之间的唯一区别是一个参数,在每种方法中我以不同的方式初始化模拟。有没有办法可以传递多个方法源?


例子:


    @ParameterizedTest

    @MethodSource("mSource1")

    public void testM1(MyMock m1, MyMock m2) {

            callMut(m1, m2, ENUM.VAL1);

            //same assertion

    }


    @ParameterizedTest

    @MethodSource("mSource2")

    public void testM2(MyMock m1, MyMock m2) {

            callMut(m1, m2, ENUM.VAL2);

            //same assertion

    }


   private static Stream<Arguments>  mSource1() {

            when(myMock1.getX()).thenReturn("1");

            //...

    }


   private static Stream<Arguments>  mSource2() {

            when(myMock1.getY()).thenReturn("1");

            //...

   }

我正在寻找类似的东西:


@ParameterizedTest

@MethodSource("mSource1", "mSource2")

public void testM1(MyMock m1, MyMock m2, MyEnum myEnumValue) {

    callMut(m1, m2, myEnumValue);

    //same assertion

}


幕布斯6054654
浏览 160回答 1
1回答

Qyouu

@MethodSource根据javadocs&nbsp;,可以接受任意数量的工厂方法:公共抽象 String[] 值用作参数来源的测试类方法的名称;不能为空。因此,只需将它们放在花括号内,并确保它们也返回一个枚举值:@MethodSource({"mSource1",&nbsp;"mSource2"})不过,正如我所见,您可能需要将 when().then() 设置移动到测试本身,但那是您的 impl 的一个细节。
随时随地看视频慕课网APP

相关分类

Java
我要回答