如果来自某个特定属性的所有值都具有相同的类型,我正在尝试检查我的集成测试。我试图与jsonPath和JsonPathResultMatchers一起做但没有成功。最后,我做了类似的事情:
MvcResult result = mockMvc.perform(get("/weather/" + existingCity))
.andExpect(MockMvcResultMatchers.status().isOk())
.andReturn();
String responseContent = result.getResponse().getContentAsString();
TypeRef<List<Object>> typeRef = new TypeRef<List<Object>>() {
};
List<Object> humidities = JsonPath.using(configuration).parse(responseContent).read("$.*.humidity", typeRef);
Assertions.assertThat(humidities.stream().allMatch(humidity -> humidity instanceof Integer)).isTrue();
但我想知道是否存在一些更清晰的方法来实现这一点,使用JSONPath可以获得相同的结果吗?或AssertJ有一些方法可以在没有使用流代码的情况下找到它
答案 0 :(得分:3)
回答AssertJ部分:Stream
断言提供了一些警告,因为被测Stream
被转换为List
,以便能够执行多个断言(否则你不能只使用一次流。)
Javadoc:assertThat(BaseStream)
示例:
assertThat(DoubleStream.of(1, 2, 3)).isNotNull()
.contains(1.0, 2.0, 3.0)
.allMatch(Double::isFinite);
我很高兴使用https://github.com/lukas-krecan/JsonUnit来检查JSON,你可以尝试一下,看看你是否喜欢它。
答案 1 :(得分:1)
我个人宁愿用JSON schema验证它。有Java validator implementations可以帮助您