给定一个我想测试的对象列表,它们以正确的顺序返回,但我不想断言整个对象。
例如,我想通过
验证它们是否按顺序排列id 1,
id 2,
id 3,
或在另一种情况下
date mostRecent
date older
date oldest
或在另一个案例中
enum ValueA
enum ValueB
enum ValueC
基本上我想测试我指定的排序是否正确,但对象上只有一个属性实际上会影响这个,所以我想用hasFirstItem( withPropertyEqualTo ... has secondItem( withPropertyEqualTo
我知道我可以写
assertEquals( property, list.get(0).id )
assertEquals( property, list.get(1).id )
但我宁愿做一些事情,使失败更加明显,因为它是一个排序问题,也许是声明性地,立即测试整个集合。这可能吗?
答案 0 :(得分:3)
你应该能够像这样使用hamcrest的匹配器hasProperty
:
public class Foo {
private String a;
public Foo(String a) {
this.a = a;
}
public Object getStr() {
return a;
}
public static void main(String[] args) {
List<Foo> l = Arrays.asList(new Foo("a"), new Foo("b"));
Assert.assertThat(l, contains(hasProperty("str", equalTo("a")),
hasProperty("str", equalTo("b"))));
}
}
其中“str”是您要检查的属性的名称。请注意,这仅适用于名为getXxx
的方法,因为它旨在测试JavaBeans。
答案 1 :(得分:2)
解决此问题的一种方法是根据给定的属性简单地对列表进行排序,然后将排序后的列表与原始列表进行比较:
header {
background-image: url('../img/bg.png');
height: 380px;
input#searchBox {
width: 100%;
height: 70px;
}
}
答案 2 :(得分:1)
你可以迭代收集并报告第一个感兴趣的财产失败的案例吗?
for (int i=0; i<list.size()-1; ++i) {
if (list.get(i) > list.get(i+1)) {
fail(String.format("%s > %s; in the wrong place in the sorted list for index %d",
list.get(i), list.get(i+1), i));
}
}
答案 3 :(得分:0)
您可以在assert命令中指定消息
assertEquals("Sort out of order at index " + i, expected.get(i), list.get(i));
,或者
assertSame("Sort out of order at index " + i, expected.get(i), list.get(i));
答案 4 :(得分:0)
假设属性对象实现了 Comparable 接口:
Object previous = list.get(0);
for (Object element : list) {
assertTrue(previous.getProperty().compareTo(element.getProperty()) <= 0);
previous = element;
}