我的大部分测试都使用 hamcrest,但遇到了一个问题,它无法测试对象图中下一层的属性。下面是我的测试用例的片段

final List<Foo> foos= fooRepository.findAll(spec);
      assertThat(results, is(notNullValue()));
      assertThat(results, hasItem(hasProperty("id.fooID1", equalTo("FOOID1"))));

所以在这里我想检查在 foos 列表中我是否有一个属性 id.fooID1 equla 到 FOOID1 。在这里我将向下一层检查我的嵌套属性。这目前在 hamcrest 中不起作用,我收到以下错误。
java.lang.AssertionError:
Expected: a collection containing hasProperty("id.fooID1", "FOOID1")
     but: No property "id.fooID1"
    at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)
    at org.junit.Assert.assertThat(Assert.java:956)
    at org.junit.Assert.assertThat(Assert.java:923)

有关此问题的任何帮助或解决方法。

最佳答案

您可以嵌套 hasProperty 调用:

assertThat(results, hasItem(hasProperty("id", hasProperty("fooID1", equalTo("FOOID1")))));

对于更深的嵌套,这可能有点笨拙。

关于java - 有没有办法用 Hamcrest 对嵌套属性进行深入比较,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36363372/

10-13 04:30