我的大部分测试都使用 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/