我有以下代码,我无法弄清楚它为什么不起作用:
@Test
public void someTest(){
List<MyItem> i = new ArrayList<>();
MyItem i1 = new MyItem();
i1.setName("paul");
MyItem i2 = new MyItem();
i2.setName("detlef");
i.add(i1);
i.add(i2);
MatcherAssert.assertThat(i,
Matchers.contains(
HasPropertyWithValue.hasProperty("name", CoreMatchers.is("paul"))));
}
MyItem:
public class MyItem {
private String name;
public String getName() {
return name;
}
public void setName(final String name) {
this.name = name;
}
}
我找到了解决方案here,但我的单元测试会给出一个AssertionError:
java.lang.AssertionError:
Expected: iterable containing [hasProperty("name", is "paul")]
but: Not matched: <MyItem@4e08711f>
at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)
at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:8)
at TestHarnes.someTest(TestHarnes.java:115)
提供任何帮助或提示
答案 0 :(得分:1)
我认为包含匹配列表中的所有项目,但您只断言一个项目。您需要检查这两个项目或使用另一个匹配器,例如hasItems。
答案 1 :(得分:0)
恕我直言,你应该这样测试:
MatcherAssert.assertThat(ACTUAL,is(equalTo(EXPECTED)));
您可以检查列表的大小,从您想要的列表中获取对象,并检查它是否相等以期望数据。 is
和equalTo
您应该导入为静态
答案 2 :(得分:0)
如果您只想声明列表中的单个项目,那么您需要hasItem
匹配器。 contains
匹配器检查列表中的所有项目。
assertThat(i, hasItem(hasProperty("name", is("paul"))));