2017-12-03 17 views
0

私はいくつかの特定のプロパティからのすべての値が同じタイプのものであるかどうかを、統合テストでチェックしようとしています。私はjsonPathとJsonPathResultMatchersと一緒にそれをやろうとしていましたが、成功しませんでした。最後に、私にこのようなものでした:すべてのJSONプロパティの値のタイプをチェックする最も良い方法は何ですか?

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に使用ストリームコードなしでそれを見つける方法があります

答えて

3

Streamアサーションは、複数のアサーションを実行できるようにするためにListに変換され、テスト中のStreamなど、いくつかの注意点が設けられている(そうでない場合は、あなたがすることはできませんストリームは一度しか消費できません)。

のJavadoc:assertThat(BaseStream)

例:

assertThat(DoubleStream.of(1, 2, 3)).isNotNull() 
            .contains(1.0, 2.0, 3.0) 
            .allMatch(Double::isFinite); 

私は喜んでJSONをチェックするためにhttps://github.com/lukas-krecan/JsonUnitを使用している、あなたはそれを試してみることができますし、あなたがそれを好きかどうかを確認します。

関連する問題