스프링 부트 프로젝트(레스토랑 예약 사이트 만들기)- 가게추가-2 15강 해석

Psj·2021년 12월 28일
0

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가 들어가게 돼있는것을 확인할수 있다.
다음시간에는 이부분을 변경할것이다.

profile
Software Developer

0개의 댓글