从列表中断言 属性
Assert Property from List
我有以下代码,但我不明白为什么它不起作用:
@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"))));
}
我的物品:
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)
感谢任何帮助或提示
我认为 contains 匹配列表中的所有项目,但您只声明了一项。您需要检查这两个项目或使用另一个匹配器,例如 hasItems.
恕我直言,你应该这样测试:
MatcherAssert.assertThat(ACTUAL,is(equalTo(EXPECTED)));
您可以检查列表的大小,从您想要的列表中获取对象并检查它是否等于期望数据。 is
和 equalTo
您应该导入为静态
如果您只想断言列表中的单个项目,那么您需要 hasItem
匹配器。 contains
匹配器检查列表的所有项目。
assertThat(i, hasItem(hasProperty("name", is("paul"))));
我有以下代码,但我不明白为什么它不起作用:
@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"))));
}
我的物品:
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)
感谢任何帮助或提示
我认为 contains 匹配列表中的所有项目,但您只声明了一项。您需要检查这两个项目或使用另一个匹配器,例如 hasItems.
恕我直言,你应该这样测试:
MatcherAssert.assertThat(ACTUAL,is(equalTo(EXPECTED)));
您可以检查列表的大小,从您想要的列表中获取对象并检查它是否等于期望数据。 is
和 equalTo
您应该导入为静态
如果您只想断言列表中的单个项目,那么您需要 hasItem
匹配器。 contains
匹配器检查列表的所有项目。
assertThat(i, hasItem(hasProperty("name", is("paul"))));