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

时间:2018-11-05 10:16:36

标签: java unit-testing testing junit 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
}

1 个答案:

答案 0 :(得分:2)

@MethodSource可以根据Javadocs接受任意数量的工厂方法:

  

公共抽象String []值

     

测试类方法的名称   用作论据的来源;不能为空。

因此,只需将它们放在花括号内,并确保它们还返回一个枚举值:

@MethodSource({"mSource1", "mSource2"})

不过,正如我所见,您可能需要将when()。then()设置移至测试本身,但这就是您的展示的细节。