【问题标题】:Can @Parameter method return Collection<List<String>> instead of Collection<String[]>?@Parameter 方法可以返回 Collection<List<String>> 而不是 Collection<String[]> 吗?
【发布时间】:2017-02-17 21:31:16
【问题描述】:

当我使用这个 @Parameter 方法执行参数化测试类时,我得到了一个 java.lang.IllegalArgumentException - wrong number of arguments 异常。

代码:

@Parameters
public static Collection<List<String>> inputParameter(){
    Collection<List<String>> parameters = new ArrayList<>();
    List<String> args1 = new ArrayList<>();
    args1.add("CD");
    args1.add("AACD");

    List<String> args2 = new ArrayList<>();
    args2.add("BCBC");
    args2.add("BCBC");

    parameters.add(args1);
    parameters.add(args2);

    return parameters;
}

请帮助我理解这段代码中的问题。感谢任何帮助!

【问题讨论】:

    标签: java junit4 parameterized


    【解决方案1】:

    我不确定我是否完全了解您想要什么或您真正想要完成什么,但我愿意在这里试一试。如果您要提供更多信息,那么您很可能会得到更深入的答案。

    您在帖子中提供的代码没有问题,并且确实可以编译,这完全取决于您如何调用该方法,然后您如何遍历 inputParameter() 方法返回结果(集合) .

    因为此方法返回一个列表集合,您需要声明一个集合以将返回的集合放入:

    Collection<List<String>> list = inputParameter();
    

    有几种方法可以遍历集合。这一切都取决于你想从集合中得到什么。我相信您只是想看看每个列表包含什么:

    //Java 8 (sequential Stream):
    list.forEach((temp) -> {
        System.out.println(temp);
    });
    

    控制台输出将是:

    [CD, AACD]
    [BCBC, BCBC]
    

    【讨论】:

    • 感谢您的回答。我认为我的问题不是很清楚;所以我想重申一下。正如您在我的代码中看到的,我的@Parameters 方法的返回类型是Collection>。当 Collection> 被指定为返回类型时,我得到 java.lang.IllegalArgumentException;但是当我修改我的代码以返回 Collection 时,我没有得到任何异常。我很想知道这种行为的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-02
    • 2019-06-20
    • 1970-01-01
    • 2017-05-28
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    相关资源
    最近更新 更多