Spring 3.2.11.RELEASEとJUnit 4.11を使用しています。 Spring mockMvcフレームワークを使用して、JSONデータを返すメソッドに特定のJSON要素が含まれているかどうかを確認するにはどうすればよいですか?私が持っています
mockMvc.perform(get("/api/users/" + id))
.andExpect(status().isOk())
.andExpect(content().string("{\"id\":\"" + id + "\"}"));
ただし、これは返された文字列と完全に一致するかどうかをチェックし、JSON文字列にローカルフィールド「id」に含まれる値が含まれているかどうかを確認します。
文字列の代わりにHamcrest Matcherを渡すことができるようです。次のようになります:
mockMvc.perform(get("/api/users/" + id))
.andExpect(status().isOk())
.andExpect(content().string(org.hamcrest.Matchers.containsString("{\"id\":\"" + id + "\"}")));
他の方法で比較または操作できるように、mockMVC要求の文字列応答に到達できる別の方法は次のとおりです。
MvcResult result = mockMvc.perform(get("/api/users/" + id))
.andExpect(status().isOk())
.andReturn();
String stringResult = result.getResponse().getContentAsString();
boolean doesContain = stringResult.contains("{\"id\":\"" + id + "\"}");
Stringメソッドを使用しながら、すべてをassertTrueでラップすることもできます。
assertTrue(mockMvc.perform(get("/api/users/" + id))
.andExpect(status().isOk())
.andReturn()
.getResponse()
.getContentAsString()
.contains("{\"id\":\"" + id + "\"}");
私は承認された答えを好みますが、これを別の選択肢として提出するつもりでした。
そのためのより適切な方法は次のとおりです。
mockMvc.perform(get("/api/users/" + id))
.andExpect(status().isOk())
.andExpect(jsonPath("$.id", org.hamcrest.Matchers.is(id)));