具有多个方法源的 JUnit5 参数化测试
JUnit5 parameterized test with multiple method source
我有 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
}
根据 javadocs,@MethodSource
可以接受任意数量的工厂方法:
public abstract String[] value
The names of the test class methods to
use as sources for arguments; must not be empty.
所以只需将它们放在花括号内并确保它们 return 也是一个枚举值:
@MethodSource({"mSource1", "mSource2"})
据我所知,您可能需要将 when().then() 设置移至测试本身,但这是您的实现的一个细节。
我有 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
}
根据 javadocs,@MethodSource
可以接受任意数量的工厂方法:
public abstract String[] value
The names of the test class methods to use as sources for arguments; must not be empty.
所以只需将它们放在花括号内并确保它们 return 也是一个枚举值:
@MethodSource({"mSource1", "mSource2"})
据我所知,您可能需要将 when().then() 设置移至测试本身,但这是您的实现的一个细节。