我有两个收藏
public class Dumb {
private String id;
//setters & getters
}
简明扼要地,
@Test
public void test() {
Collection<Dumb> actual = new ArrayList<Dumb>();
Dumb actualDumbOne = new Dumb();
actualDumbOne.setId("1");
Dumb actualDumbTwo = new Dumb();
actualDumbTwo.setId("2");
actual.add(actualDumbOne);
actual.add(actualDumbTwo);
Collection<Dumb> expected = new ArrayList<Dumb>();
Dumb expectedDumbOne = new Dumb();
expectedDumbOne.setId("1");
Dumb expectedDumbTwo = new Dumb();
expectedDumbTwo.setId("2");
expected.add(expectedDumbOne);
expected.add(expectedDumbTwo);
assertThat(expected, containsInAnyOrder(actual));
}
它失败的原因是:
Expected: iterable over [<[Dumb@56114349, Dumb@46c28400]>] in any order
but: Not matched: <Dumb@2d6abfc7>
重要提示:我无法更改
Dumb
code,它是第三方类。重要提示:我需要比较Dumb。id等于Dumb。id
。
有什么想法吗?
如果你只需要比较一下哑巴。id成员,您可以将id提取到列表中并比较生成的id列表。
List<String> actualIds = actual.stream().map(Dumb::getId).collect(Collectors.toList());
List<String> expectedIds = expected.stream().map(Dumb::getId).collect(Collectors.toList());
assertThat(expectedIds, containsInAnyOrder(actualIds.toArray()));
您能帮助我在使用方法时哪里出错了吗?
但是想法 我该怎么写?
我有两个对象集合。这两个集合中的对象是不同类型的,并且有一个自定义匹配器来检查它们是否引用相同的东西。此外,集合的顺序相同。比方说,我们可以按名称比较这些集合中的实体,它们按该名称排序,我们有一个自定义匹配器,如果名称相同,则返回true。 我需要的是一个匹配器,它将逐项迭代这两个集合,并使用现有的自定义匹配器比较这些对(我也可以修改它)。 有人知道怎么做吗? 我的意思是:
有人能给我解释一下hamcrest是如何比较馆藏的,以及图书馆的不同方法是用来做什么的吗 我正在试图理解IsterableContainingAnyOrder#ContainingAnyOrder方法是如何工作的 ISiterableContainingAnyOrder类中有三个重载方法:
我做错了什么,怎么修复?
我有以下课程: 现在我想在下面的测试中使用Hamcrest Matcher(它只是一个简化的示例): 但我也犯了同样的错误。 我使用的是Hamcrest 1.3版