요깨비's LAB

[Spring Boot, Back-End] 4. 가게 목록 구현 본문

웹 개발/스프링 부트 프로젝트(레스토랑 예약)

[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 값으로 반환하는 것을 확인할 수 있습니다.

Comments