티스토리 뷰

가게 목록 만들기


GET/restaurants에 대해 JSON 포맷으로 응답해준다.

각 URL에 대해서 요청이 들어왔을 때 처리하는 Controller를 만들어본다.

 

1. Restaurant에 대한 Controller를 생성해준다.

 

먼저, main/java 안의 interfaces 패키지에 RestaurantController.java 파일을 생성해준다.

이후, Go To - Test 를 통해 RestaurantControllerTest.java 파일도 생성해준다.

 

 

 

2. RestaurantControllerTest.java 안에 /restaurant에 대해 get 요청을 해주는 class를 만든다.

 

@WebMvcTest(RestaurantController.class) 라는 Annotation으로 RestaurantController를 테스트한다는 것을 명시해줄 수 있다.

그리고 mvc라는 객체를 이용해 perform 해주고 인자로 get("/restaurant")을 넣어준다.

요청을 했을 때 올바른 결과값이 나왔다는 것을 확인하기 위해 andExpect도 추가해준다.

빨간 글씨로 되어있는 mvc에 커서를 두고 Windows 기준 Alt + Enter를 누르고 Create Field를 해준다.

mvc의 type은 MockMvc로 해주고 @Autowired라는 Annotation을 붙여준다.

 

빨간 글씨로 되어있는 get, status에도 Alt + Enter를 눌러 import 해준다.

perform에 대해서는 예외가 나오기도 하므로 Alt + Enter를 눌러 예외를 추가해준다.

 

모든 과정이 끝난 코드는 다음과 같다.

 

Test 파일을 실행해보면 오류가 나는 것을 알 수 있다.

Test 파일에서만 작업을 하고 실제 Controller에서는 작업을 하지 않았기 때문이다.

 

 

 

3. RestController에 대한 작업을 진행한다.

REST API를 사용하는 RestController를 만들 것이기 때문에 @RestController 라는 Annotation을 붙여준다.

그리고 레스토랑의 목록을 얻을 것이기 때문에 List type인 list() 함수를 만든다.

null이 반환되기 때문에 테스트에서는 오류가 나게 된다.

restaurants라는 이름의 ArrayList를 생성해주고 이를 반환해준다.

또한, "/restaurants"이라는 URL을 입력받았을 때 레스토랑 목록을 출력해주도록 @GetMapping 이라는 Annotation을 추가해준다.

 

 

4. 다음은 가게 이름이 반환되는지 확인해본다.

andExpect()를 이용해 확인할 수 있다.

Test 파일을 실행해보면 당연히 실패하는데 아직 실제 반환된 값이 없기 때문이다.

RestaurantsController.java 파일에 작업을 하여 기대하는 값이 나오도록 만든다.

새로운 Restaurant 객체를 생성해주고 restaurants에도 추가해준다.

하지만 실제로는 JSON형식으로 전달되기 때문에 다음과 같은 형식으로 Test 파일을 수정해준다.

 

 

5. restaurant의 id값도 추가해보자.

domain model에 id가 아직 없기 때문에 Test는 실패하게 된다.

먼저 restaurant model에 id를 넣어준다.

RestaurantControllerTest.java 파일의 Restaurant 생성자의 인자로 1004L을 모두 넣어준다. (뒤의 L은 Long type에 맞춰준 것이다.)

RestaurantController.java 파일에서도 Restaurant 생성자의 인자로 1004L을 넣어준다.

 RestaurantTest.java 파일의 creation method에 Id 관련 assertThat()을 추가해준다.

Restaurant.java 파일에서 getId() method를 추가해주고, Id에 대한 field도 생성해주고, 생성자에도 Id를 넣어준다.

 

 

6. 마지막으로 localhost:8080/restaurants 로 접속했을 때 다음과 같은 페이지가 나오면 정상적으로 Controller가 동작하는 것이다.

'Web > Spring Boot' 카테고리의 다른 글

Repository를 이용해 중복된 코드 제거하기  (0) 2020.05.02
Controller를 이용해 가게 상세 가져오기  (0) 2020.05.02
REST API  (0) 2020.04.29
TDD의 활용  (0) 2020.04.29
테스트 주도 개발  (0) 2020.04.29
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함