Java 如何使用两个带过滤值的参数编写@ParameterizedTest?

Java 如何使用两个带过滤值的参数编写@ParameterizedTest?,java,unit-testing,testing,junit,junit5,Java,Unit Testing,Testing,Junit,Junit5,以我的测试类为例: public class TestClass { static public class Vegetable { String name public Vegetable(String name) { ... } } static public class Fruit { String name; List<Vegetable> assignedVegs;

以我的测试类为例:

public class TestClass {

    static public class Vegetable {
         String name

         public Vegetable(String name) { ... }
    }

    static public class Fruit {
        String name;
        List<Vegetable> assignedVegs;

        public Fruit(String name, List<Vegetable> vegs) { ... }
    }

    List<Fruit> fruits = asList(
        new Fruit("Orange", asList(new Vegetable("Potato"))),
        new Fruit("Apple", asList(new Vegetable("Potato"), new Vegetable("Carot")))
    );         

    @ParametrizedTest
    public void test(Fruit f, Vegetable v) { ... }
}
公共类TestClass{
静态公共类蔬菜{
字符串名
公共蔬菜(字符串名称){…}
}
静态公共类水果{
字符串名;
列出指定的蔬菜;
公共水果(字符串名称,列出蔬菜){…}
}
列出水果=asList(
新水果(橙色)、新蔬菜(土豆),
新水果(“苹果”、asList(新蔬菜(“土豆”)、新蔬菜(“卡洛特”))
);         
@参数化测试
公共空隙试验(水果f、蔬菜v){…}
}
我想用以下数据组合运行我的
测试
方法

  • [“橙色”、“土豆”]
  • [“苹果”、“土豆”]
  • [“苹果”、“卡洛特”]

但是,无需向
水果添加更多元素
或更改
测试的签名
。使用例如
@MethodSource
实现此目的的最佳方法是什么?或者有没有其他类似junit的方法来实现类似的结果?如果参数空间的维数更高,该方法会是什么?

是的,它确实适用于使用lambdas的
@MethodSource

private static Stream<Arguments> testDataProvider() {
    List<Arguments> testCases = new ArrayList<>();

    fruits.forEach(fruit -> {
        fruit.assignedVegs.forEach(veg -> {
            testCases.add(Arguments.of(fruit, veg));
        });
    });

    return testCases.stream();
}
private静态流testDataProvider(){
List testCases=new ArrayList();
水果。forEach(水果->{
水果。指定蔬菜。forEach(蔬菜->{
添加(水果、蔬菜的参数);
});
});
返回testCases.stream();
}

对于更高的维度,可以进一步嵌套
。forEach
s

是的,它确实可以使用lambdas使用
@MethodSource

private static Stream<Arguments> testDataProvider() {
    List<Arguments> testCases = new ArrayList<>();

    fruits.forEach(fruit -> {
        fruit.assignedVegs.forEach(veg -> {
            testCases.add(Arguments.of(fruit, veg));
        });
    });

    return testCases.stream();
}
private静态流testDataProvider(){
List testCases=new ArrayList();
水果。forEach(水果->{
水果。指定蔬菜。forEach(蔬菜->{
添加(水果、蔬菜的参数);
});
});
返回testCases.stream();
}
对于更高的维度,可以进一步嵌套
。forEach
s