스프링 부트 프로젝트(레스토랑 예약 사이트 만들기)- 가게추가-2 15강 해석
test/~/application/RestaurantServiceTest.java
public void addRestaurant() 테스트
package kr.co.fastcampus.eatgo.application;
import kr.co.fastcampus.eatgo.domain.*;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import java.util.ArrayList;
import java.util.List;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.*;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.BDDMockito.given;
public class RestaurantServiceTest {
private RestaurantService restaurantService;
@Mock // 가짜객체 만드는 어노테이션
private RestaurantRepository restaurantRepository;
@Mock // 가짜객체 만드는 어노테이션
private MenuItemRepository menuItemRepository;
@Before // 모든 테스트가 실행되기전 이 어노테이션이 붙은 테스트가 먼저 실행되고 다음 테스트가 실행된다
public void setUp(){
MockitoAnnotations.initMocks(this); // 현재 @Mock 어노테이션이 붙어있는 객체를 초기화하는것
mockRestaurantRepository();
mockMenuItemRepository();
restaurantService = new RestaurantService(
restaurantRepository, menuItemRepository);
}
private void mockRestaurantRepository() {
List<Restaurant> restaurants = new ArrayList<>();
Restaurant restaurant = new Restaurant(1004L, "Bob zip", "Seoul");
restaurants.add(restaurant);
given(restaurantRepository.findAll()).willReturn(restaurants);
given(restaurantRepository.findById(1004L)).willReturn(restaurant);
}
private void mockMenuItemRepository() {
List<MenuItem> menuItems = new ArrayList<>();
menuItems.add(new MenuItem("Kimchi"));
given(menuItemRepository.findAllByRestaurantId(1004L)).willReturn(menuItems);
}
@Test
public void getRestaurants(){
List<Restaurant> restaurants = restaurantService.getRestaurants();
Restaurant restaurant = restaurants.get(0);
assertThat(restaurant.getId(), is(1004L));
}
@Test
public void getRestaurant(){
Restaurant restaurant = restaurantService.getRestaurant(1004L);
assertThat(restaurant.getId(), is(1004L));
MenuItem menuItem = restaurant.getMenuItems().get(0);
assertThat(menuItem.getName(), is("Kimchi"));
}
@Test
public void addRestaurant(){
Restaurant restaurant = new Restaurant("BeRyong","Busan"); // id를 넣지않아도 id가 만들어질수있게 생성자 구성
Restaurant saved = new Restaurant(1234L,"BeRyong","Busan");
given(restaurantRepository.save(any())).willReturn(saved); // saved 객체 테스트
Restaurant created = restaurantService.addRestaurant(restaurant); // 새롭게 만든 레스토랑 추가
assertThat(created.getId(), is(1234L)); // id없이 만든 restuarant 객체의 id값 일치하는지 테스트
}
}
main/~/domain/Restaurant.java
public Restaurant(String name, String address) : id 생성할 필요없는 생성자 생성
package kr.co.fastcampus.eatgo.domain;
import jdk.internal.jimage.ImageStrings;
import java.util.ArrayList;
import java.util.List;
public class Restaurant {
private Long id;
private String name;
private String address;
private List<MenuItem> menuItems = new ArrayList<MenuItem>(); // 가게메뉴들을 담을 리스트 생성
public Restaurant() { // JSON형식을 사용할때 아무것도 없는 기본생성자가 꼭 있어야한다.
}
public Restaurant(String name, String address) { // id값 필요없는 생성자 생성
this.name = name;
this.address = address;
}
public Restaurant(Long id, String name, String address) {
this.id = id;
this.name = name;
this.address = address;
}
public void setId(long id) {
this.id = id;
}
public Long getId() {
return id;
}
public String getName() { // 생성된 객체의 이름 반환
return name;
}
public String getAddress() { // 생성된 객체의 주소 반환
return address;
}
public String getInformaion() { // 생성된 객체의 정보 반환
return name + " in " + address;
}
public List<MenuItem> getMenuItems() { // 가게의 메뉴들 반환
return menuItems;
}
public void addMenuItem(MenuItem menuItem) { // 가게메뉴 리스트에 가게메뉴 추가 메서드
menuItems.add(menuItem);
}
public void setMenuItems(List<MenuItem> menuItems) {
for (MenuItem menuItem : menuItems){
addMenuItem(menuItem);
}
}
}
test/~/domain/RestaurantRepositoryImpl.java
package kr.co.fastcampus.eatgo.domain;
import org.junit.Test;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.*;
public class RestaurantRepositoryImplTest {
@Test
public void save(){
RestaurantRepository repository = new RestaurantRepositoryImpl();
int oldCount = repository.findAll().size(); // 세이브전 개수
Restaurant restaurant = new Restaurant("BeRyong", "Seoul");
repository.save(restaurant); // 세이브
assertThat(restaurant.getId(), is(1234L));
int newCount = repository.findAll().size(); // 세이브후 개수
assertThat(newCount - oldCount, is(1));
}
}
api 테스트
http GET localhost:8080/restaurants // 처음 가게목록 조회
http POST localhost:8080/restaurants name=BeRyong address=Busan // 가게 추가
http GET localhost:8080/restaurants // 다시 목록확인해서 추가된 가게 확인
http POST localhost:8080/restaurants name=JOKER address=Seoul // 다른이름의 가게 하나더 추가
http GET localhost:8080/restaurants // 가게목록 다시확인
하지만 새로 추가할때마다 id값이 중복되는 1234가 들어가게 돼있는것을 확인할수 있다.
다음시간에는 이부분을 변경할것이다.
Author And Source
이 문제에 관하여(스프링 부트 프로젝트(레스토랑 예약 사이트 만들기)- 가게추가-2 15강 해석), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@psj0810/스프링-부트-프로젝트레스토랑-예약-사이트-만들기-가게추가-2-15강-해석-82e0thrb저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)