Spring MVCのJSONドキュメント応答でjsonPathを使用してアサートする方法を理解するのに苦労しています。おそらく、この特定のシナリオでjsonPathを使用するよりも、これを達成するためのより良い方法があるでしょう。リンク配列に「self」のrel項目があり、「self」のオブジェクトの「href」属性にも「/」に等しい「href」属性があることを確認したいと思います。 JSON応答は次のようになります。
{
"links":[
{
"rel":[
"self"
],
"href":"/"
},
{
"rel":[
"next"
],
"href":"/1"
}
]
}
私はそれがrel [0]にselfがあることを確認できるところで試してみましたが、links配列とrel配列のどこにselfがあるかに依存せず、実際にそのhrefがlink [rel] [self]にあるかテストします「/」です。何か案は?
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
mockMvc = MockMvcBuilders.standaloneSetup(welcomeController).build();
}
@Test
public void givenRootUrl_thenReturnLinkToSelf() throws Exception {
mockMvc.perform(get("/")).andDo(print()).andExpect(status().isOk())
.andExpect(jsonPath("$.links[0].rel[0].", is("self")));
}
andExpectメソッドをいくつか追加してみませんか?次のようなもの:
mockMvc.perform(get("/")).andDo(print()).andExpect(status().isOk())
.andExpect(jsonPath("$.links[0].rel[0]", is("self")))
.andExpect(jsonPath("$.links[0].href[0]", is("/"));
受け入れられた回答 は私には問題ないように見えます。しかし、junit4についてはよく知りません。したがって、Junit5を使用して典型的なシナリオをテストする方法をここに追加します。
mockMvc.perform(get("/"))
.andDo(print())
.andExpect(status().isOk())
.andExpect(jsonPath("$.links", hasSize(2)))
.andExpect(jsonPath("$.links[0].rel[0]")
.value("self"))
.andExpect(jsonPath("$.links[0].href[0]")
.value("/"))
ここでは静的インポート(初心者の場合)を追加します。最初に作業していたときに、いくつかのインポート内のどのインポートを特定する必要があったからです。
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import static org.hamcrest.Matchers.hasSize;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
これが誰かのために役立つことを願っています。特にユニットテストの初心者:)