Spring Boot Test 印出Controller REST API回應的json內容。
範例環境:
- Java 8
- Spring Boot 2.3.2.RELEASE
- JUnit 5
- Lombok
API回應json資料中代表的物件EmployeeDto
。
EmployeeDto
package com.abc.demo.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class EmployeeDto {
private long id;
private String name;
private Integer age;
}
回應內容包裝在回應代碼及訊息的物件Response
。
Response
package com.abc.demo.controller.response;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
@Data
public class Response<T> {
private String code;
private String message;
private T data;
public static <T> Response<T> success(T data) {
Response<T> response = new Response<>();
response.setCode("0");
response.setMessage("success");
response.setData(data);
return response;
}
}
DemoController
提供API /employees
回傳員工資料。
DemoController
package com.abc.demo.controller;
import com.abc.demo.controller.response.Response;
import com.abc.demo.dto.EmployeeDto;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Arrays;
import java.util.List;
@Slf4j
@RestController
public class DemoController {
@GetMapping(value = "/employees", produces = MediaType.APPLICATION_JSON_VALUE)
public Response<List<EmployeeDto>> getEmployees() {
log.info("取得員工列表");
List<EmployeeDto> employeeDtoList = Arrays.asList(
new EmployeeDto(1, "John", 33),
new EmployeeDto(2, "Mary", 28)
);
return Response.success(employeeDtoList);
}
}
測試
在DemoControllerTests
中以MockMvc.perform()
呼叫API /employees
並呼叫.andReturn()
取得回應MvcResult
,然後呼叫MvcResult.getResponse().getContentAsString()
取得回應的json字串並印出。
DemoControllerTests
package com.abc.demo.controller;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@AutoConfigureMockMvc
@SpringBootTest
public class DemoControllerTests {
@Autowired
private MockMvc mockMvc;
@Test
void employees() throws Exception {
MvcResult result = mockMvc.perform(get("/employees"))
.andExpect(status().isOk())
.andReturn();
System.out.println(result.getResponse().getContentAsString()); // {"code":"0","message":"success","data":[{"id":1,"name":"John","age":33},{"id":2,"name":"Mary","age":28}]}
}
}
沒有留言:
張貼留言