gpt4 book ai didi

java - Hamcrest 比较系列

转载 作者:IT老高 更新时间:2023-10-28 11:30:41 25 4
gpt4 key购买 nike

我正在尝试比较 2 个列表:

assertThat(actual.getList(), is(Matchers.containsInAnyOrder(expectedList)));

但想法

java: no suitable method found for assertThat(java.util.List<Agent>,org.hamcrest.Matcher<java.lang.Iterable<? extends model.Agents>>)
method org.junit.Assert.<T>assertThat(T,org.hamcrest.Matcher<T>) is not applicable
(no instance(s) of type variable(s) T exist so that argument type org.hamcrest.Matcher<java.lang.Iterable<? extends model.Agents>> conforms to formal parameter type org.hamcrest.Matcher<T>)
method org.junit.Assert.<T>assertThat(java.lang.String,T,org.hamcrest.Matcher<T>) is not applicable
(cannot instantiate from arguments because actual and formal argument lists differ in length)

我应该怎么写?

最佳答案

如果你想断言这两个列表是相同的,不要用 Hamcrest 使事情复杂化:

assertEquals(expectedList, actual.getList());

如果您真的打算执行不区分顺序的比较,您可以调用 containsInAnyOrder varargs 方法并直接提供值:

assertThat(actual.getList(), containsInAnyOrder("item1", "item2"));

(假设您的列表是 String ,而不是 Agent ,对于这个例子。)

如果你真的想用 List 的内容调用相同的方法:

assertThat(actual.getList(), containsInAnyOrder(expectedList.toArray(new String[expectedList.size()]));

如果没有这个,您将使用单个参数调用该方法并创建一个 Matcher期望匹配 Iterable其中每个元素是一个List .这不能用于匹配 List .

也就是说,您无法匹配 List<Agent>Matcher<Iterable<List<Agent>> ,这是您的代码正在尝试的。

关于java - Hamcrest 比较系列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21624592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com