웹 개발/스프링 부트 프로젝트(레스토랑 예약)
[Spring Boot, Back-End] 4. 가게 목록 구현
요깨비
2019. 12. 30. 19:04
1. RestaurantController Class/Test Class 작성
RestaurantController 클래스와 이를 테스트하기 위한 RestaurantControllerTests junit 클래스를 작성합니다.
public class RestaurantController {
}
import static org.junit.Assert.*;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
@RunWith(SpringRunner.class)
@WebMvcTest(RestaurantController.class) // Restaurant 컨트롤러를 테스트하겠다는 어노테이션
public class RestaurantControllerTest {
@Autowired
private MockMvc mvc;
@Test
public void list() throws Exception {
mvc.perform(get("/restaurants")).andExpect(status().isOk());
}
}
RestaurantController 클래스를 작성하지 않았기 때문에 Red 상태입니다. 이제 컨트롤러를 구현해보죠
@RestController
public class RestaurantController {
@GetMapping
public List<Restaurant> list() {
List<Restaurant> restaurants = new ArrayList<>();
return restaurants;
}
}
Restaurant에는 id값, 이름, 주소가 있다고 가정하겠습니다. 그러면 먼저 RestaurantControllerTest 클래스를 작성합시다.
@RunWith(SpringRunner.class)
@WebMvcTest(RestaurantController.class) // Restaurant 컨트롤러를 테스트하겠다는 어노테이션
public class RestaurantControllerTest {
@Autowired
private MockMvc mvc;
@Test
public void list() throws Exception {
mvc.perform(get("/restaurants")).andExpect(status().isOk())
.andExpect(content().string(containsString("\"id\":1004")))
.andExpect(content().string(containsString("\"name\":\"Mcdonald\"")))
.andExpect(content().string(containsString("\"address\":\"Seoul\"")));
}
}
그다음 테스트가 성공하도록 Restaurant 클래스의 구현하지 않은 부분을 수정해줍니다.
public class RestaurantTests {
@Test
public void creation() {
Restaurant restaurant = new Restaurant(1004L,"Mcdonald","Seoul");
assertThat(restaurant.getId(), is(1004L));
assertThat(restaurant.getName(), is("Mcdonald"));
assertThat(restaurant.getAddress(), is("Seoul"));
}
}
코드를 작성해줍니다. 구현이 되지 않아 에러가 발생하는 부분들을 구현해 나갑니다.
public class Restaurant {
private Long id;
private String name;
private String address;
public Restaurant(String name) {
this.name = name;
}
public Restaurant(String name, String address) {
// TODO Auto-generated constructor stub
this.name = name;
this.address = address;
}
public Restaurant(Long id,String name, String address) {
// TODO Auto-generated constructor stub
this.name = name;
this.address = address;
this.id = id;
}
public Long getId() {
return id;
}
public String getName() {
return name;
}
public String getAddress() {
return address;
}
public String getInformation() {
// TODO Auto-generated method stub
return name + " in " + address;
}
}
@RestController
public class RestaurantController {
@GetMapping("/restaurants")
public List<Restaurant> list() {
List<Restaurant> restaurants = new ArrayList<>();
restaurants.add(new Restaurant(1004L,"Mcdonald","Seoul"));
return restaurants;
}
}
이제는 테스트 케이스를 통과할 수 있습니다. 이제 실제로 프로젝트를 실행하여 localhost:8080/restaurants로
접속하면 올바르게 Restaurant 값들을 JSON 값으로 반환하는 것을 확인할 수 있습니다.