7

Map を返すコントローラーをテストしています

@RequestMapping("/")
@ResponseBody
public Map<String, String> getMessages(@RequestBody String foo) {
    Map<String, String> map = boo.getMap(foo);
    return map;
}

テスト:

...
resultActions
        .andDo(print())
        .andExpect(status().isOk())
        .andExpect(
                content().contentTypeCompatibleWith(
                        MediaType.APPLICATION_JSON))
        .andExpect(jsonPath("$", notNullValue()))
        .andExpect(jsonPath(EXPRESSION, equalsTo(foo));
 ...

マップからキーと値を読み取るには、どの式を使用すればよいですか?

編集:それを解決する方法は次のとおりです。

MvcResult result = resultActions.andReturn();
MockHttpServletResponse response = result.getResponse();
String content = response.getContentAsString();
Gson gson = new Gson();
Type typeOfT = new TypeToken<Map>() {
}.getType();
Map<String, String> map = gson.fromJson(content, typeOfT);

次に、マップをループして値をチェックします。しかし、それを行う方法はありjsonPathますか?

4

1 に答える 1

18

hamcrest Matcher を使用している場合、それは非常に簡単です。マップ エントリのキーまたは値を取得するには、2 つの方法があります。

  • Matchers.hasKey()

  • Matchers.hasValue()

結果のマップにすべてのキーが存在するかどうかを確認する簡単な例。$.translationPropertiesマップを直接指します。

 ResultActions resultActions = mvc.perform(...);
 List<String> languagesToBePresent = new ArrayList<>(); //add some values here

 for (String language : languagesToBePresent) {
            resultActions.andExpect(
                  jsonPath("$.translationProperties", Matchers.hasKey(language)));
        }
于 2015-06-26T12:22:08.220 に答える