jsonpath でメンバーをカウントするにはどうすればいいですか? 質問する

jsonpath でメンバーをカウントするにはどうすればいいですか? 質問する

JsonPath を使用してメンバーの数をカウントすることは可能ですか?

使用Spring MVC テスト私は生成するコントローラをテストしています

{"foo": "oof", "bar": "rab"}

と:

standaloneSetup(new FooController(fooService)).build()
    .perform(get("/something").accept(MediaType.APPLICATION_JSON)).andExpect(status().isOk())
    .andExpect(jsonPath("$.foo").value("oof"))
    .andExpect(jsonPath("$.bar").value("rab"));

生成された json に他のメンバーが存在しないことを確認したいと思います。できれば、jsonPath を使用してメンバーをカウントします。これは可能ですか? 代替ソリューションも歓迎します。

ベストアンサー1

サイズをテストするには配列:jsonPath("$", hasSize(4))

メンバーを数える物体:jsonPath("$.*", hasSize(4))


つまり、APIが配列4 項目中:

受け入れられる値:[1,2,3,4]

mockMvc.perform(get(API_URL))
       .andExpect(jsonPath("$", hasSize(4)));

APIが返されるかどうかをテストするには物体2 人のメンバーを含む:

受け入れられる値:{"foo": "oof", "bar": "rab"}

mockMvc.perform(get(API_URL))
       .andExpect(jsonPath("$.*", hasSize(2)));

私はHamcrestバージョン1.3とSpring Test 3.2.5.RELEASEを使用しています

hasSize(int) javadoc

import static org.hamcrest.Matchers.*;注: hasSize() が機能するには、hamcrest-library 依存関係を含める必要があります。

おすすめ記事