检查所有JSON属性值类型的最佳方法是什么?

时间:2017-12-03 14:04:24

标签: json spring junit jsonpath assertj

如果来自某个特定属性的所有值都具有相同的类型,我正在尝试检查我的集成测试。我试图与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有一些方法可以在没有使用流代码的情况下找到它

2 个答案:

答案 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可以帮助您