Hamcrest 集合断言将多个 hasProperty 合并为一个

Hamcrest collection assertions merge several hasProperty in one

实际上我正在测试一个集合中的一个项目,它包含一个 属性 key equalTo("key") 并且有一个 属性 value equalTo("value"),用两个句子表示:

assertThat(categorizedFuaDto.getMetainfos(), contains(hasProperty("key", equalTo(receivedMetaInfoValue.getKey()))));
assertThat(categorizedFuaDto.getMetainfos(), contains(hasProperty("value", equalTo(receivedMetaInfoValue.getValue()))));

是否可以将它们合二为一?

您可以尝试类似的方法:

assertThat(
    categorizedFuaDto.getMetainfos(), hasItems(Matchers.<YourClass>
        hasProperty("key", equalTo(receivedMetaInfoValue.getKey())),
        hasProperty("value", equalTo(receivedMetaInfoValue.getValue()))
    )
);

什么地方 class 输入这个方法 returns returns: categorizedFuaDto.getMetainfos()

示例见此处:

但我不确定这对您的问题有何好处。最好让您的测试尽可能简单易读。

如果您想确保 (您的 collection 的)同一项 同时满足两个条件 ,您最好将它们与 AllOf 匹配器组合在一个匹配器中:

assertThat(categorizedFuaDto.getMetainfos(),
        hasItem(allOf(hasProperty("key", equalTo(receivedMetaInfoValue.getKey())), 
                        hasProperty("value", equalTo(receivedMetaInfoValue.getValue())))));