概要
SpringのMockMvcを使ってControllerのテストで、JsonRequestする。
前提
- Spring Boot を使用する。
- モデルでは日付型に JSR310 (LocalDate、他) を使用する。
テスト対象メソッド
@PostMapping(value = "hoge", consumes = MediaType.APPLICATION_JSON_VALUE)
public void hoge(@RequestBody Hoge hoge) {
System.out.println("hoge");
}
Jackson
を依存に追加
JavaとJsonの変換にはJacksonを利用する。
下記はMavenの例。
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.6.1</version>
</dependency>
UnitテストでJsonのリクエスト
下記はSpockでの例。
def "JsonのPostリクエスト"() {
setup:
// JacksonでオブジェクトをJson形式に変換
def hoge = new Hoge();
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(hoge);
expect:
mockMvc.perform(MockMvcRequestBuilders
.post('/hoge')
// ContentTypeの設定
.contentType(MediaType.APPLICATION_JSON)
// Jsonの設定
.content(json)
).andExpect(
MockMvcResultMatchers.status().is(HttpStatus.OK.value()),
)
}