【问题标题】:JUnit5 parameterized test with multiple method sourceJUnit5参数化测试多方法源
【发布时间】:2019-04-08 16:34:46
【问题描述】:

我有 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
}

【问题讨论】:

    标签: java unit-testing testing junit junit5


    【解决方案1】:

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

    公共抽象字符串[]值

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

    所以只需将它们放在花括号内并确保它们也返回一个枚举值:

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

    不过,正如我所见,您可能需要将 when().then() 设置移动到测试本身,但这是您的 impl 的一个细节。

    【讨论】:

      猜你喜欢
      • 2019-01-23
      • 1970-01-01
      • 2018-02-21
      • 1970-01-01
      • 2017-05-23
      • 2021-11-10
      • 1970-01-01
      • 2022-06-29
      • 1970-01-01
      相关资源
      最近更新 更多