比较hamcrest中的子字段

时间:2014-05-26 15:56:06

标签: java junit hamcrest

有没有办法比较子域的值和hamcrest?

class Obj{
    NestedObj nestedObj;
}

class NestedObj{
    String wantedProperty;
}

我有一个List<Obj>个objs,我想测试一下Objs所有wantedProperty的值为List<Obj> objs = new ArrayList<Obj>(); Obj obj = new Obj(); NestedObj nestedObj = new NestedObj(); nestedObj.setWantedProperty("wanted"); obj.setNestedObj(nestedObj); objs.add(obj); assertThat(objs, hasItems(Matchers.<Obj>hasProperty("nestedObj.wantedProperty", hasValue("wanted")))); &#34;想要&#34;:

{{1}}

但是nestedObj.wantedProperty不起作用。

如果有可能,我怎样才能让它发挥作用?

2 个答案:

答案 0 :(得分:2)

尝试这样的事情

assertThat(objs, hasItems(Matchers.<Obj>hasProperty("nestedObj", Matchers.<NestedObj>hasProperty("wantedProperty",equalTo("wanted")))));

答案 1 :(得分:1)

似乎您所需的功能可以表示如下

List<Obj> objs= .........; //get desired list
Matcher<NestedObj> nestedObjMatcher = hasProperty("wantedProperty", is("wanted"));
Matcher<Obj> objMatcher = hasProperty("nestedObj", nestedObjMatcher);
assertThat(objs, hasItem(objMatcher));

我在这里假设junit4的静态导入和hamcrest Matcher类似。