error: method addOutcome in class OutcomesTable cannot be applied to given types

error: method addOutcome in class OutcomesTable cannot be applied to given types

当我尝试使用 jbehave 结果对匹配器进行 hamcrest 匹配时 table 我在 maven 构建时出现以下编译时错误。

"error: method addOutcome in class OutcomesTable cannot be applied to given types"

请参考下面的示例代码。

public static <T> void method(T expected, T actual) {

        OutcomesTable outcomes = new OutcomesTable();
        List expectedList = (ArrayList)expected;
        List actualList = (ArrayList)actual;

        for(Object ExpObj : expectedList){
            outcomes.addOutcome("a success", actualList, containsInAnyOrder(ExpObj));
        }

        outcomes.verify();
}

请指出我做错了什么。

JBehave 的通用函数 public <T> void addOutcome(String description, T value, Matcher<T> matcher); 期望您在使用 T 的两个参数中为 T 提供相同的类型。例如如果您在第二个参数中传递 String value,则需要在第三个参数中提供 Matcher<String>

在你的例子中,你传递了一个 List 作为第二个参数,但是传递了用单个 Object 调用的 containsInAnyOrder(T... items) 函数的结果,这不会产生所需的实例Matcher<List> 类型。

我不太确定,你想做什么,但我认为你需要的是:

    outcomes.addOutcome("a success", actualList, Matchers.contains(ExpObj));

Matcher containsInAnyOrder(T... items) 仅对一个值没有意义,因为数组中的一个元素只存在一种排列(顺序)。 :)

您也可以像这样编译代码:

    outcomes.addOutcome("a success", actualList, Matchers.containsInAnyOrder(Arrays.asList(ExpObj)));

,但我认为这不是您所需要的。

希望我说的很清楚,并且可以提供帮助。