관리 메뉴

CASSIE'S BLOG

슈퍼코딩 105강 Spring boot와 테스팅v2 본문

PROGRAMMING/슈퍼코딩 강의 정리

슈퍼코딩 105강 Spring boot와 테스팅v2

ITSCASSIE1107 2024. 9. 28. 21:05

104강 테스트는 빈을 부르는게 아니라 그냥 객체로 만들어서 테스트하는거였음

스프링에서 활동하는 친구들을 불러서 슬라이스테스트 & 통합테스트 할 예정

밑에 Repository Layer 테스트를 한다 그러면 Repository Layer 빈만 불러서 테스트함. 

 

데이터소스같은 경우에는 정의하는 방법이 2가지임
application.yaml에 정의가능
bean에 정의할 수 있다. (JdbcConfig 파일 만들어서)

하나의 애플리케이션에 두개이상의 데이터소스를 정의하게되면은
application.yaml으로 하면 설정이 어렵고 빈으로 하면 편할 것 같아서
test하는 것은 application.yaml에 설정하는 거를 테스트할 예정이라서
data소스를 적었다고함. 

 

 


ReservationJpaRepository 저런 거 하고 나서 제대로 동작하는지 테스트를 하고싶잖아?

그러면 원래는 
Controller 들어가가지고 다시 호출해서 API불러서 SQL보고 이런 식으로 진행했잖아
테스트를 위해서 API로직을 바꿔야하는 경우가 생긴데
그래서 테스트코드를 별도로 적을거라고함. 

 

@DataJpaTest에서 slice test라는 말은 repository빼고는 안 부른다는 말임

 

repositoryLayer를 부를려고 Autowired 어노테이션을 쓰면 그냥 빈을 등록해주는건가?
이전에도 여러번 설명을 했는데 test코드에서는 생성자 주입을 하기보다는
필드주입으로하고 AutoWired라는 어노테이션을 이용해서 빈을 호출하는게 맞다고함. 

 

 

지금은 돌아감

 

 

slice test라는거를 증명하기위해서
@Autowired
필드에 private AirReservationService airReservationService

이거 적어주면 실행이 안될거라고함. 

 

바로 test fail

 

 

package com.github.supercoding.repository.reservations;

import com.github.supercoding.service.AirReservationService;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
import org.springframework.boot.test.autoconfigure.orm.jpa.AutoConfigureDataJpa;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;

import java.util.List;

import static org.junit.jupiter.api.Assertions.*;

@Slf4j
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@DataJpaTest //대표적인 slice test => Dao Layer / Jpa 사용하고있는 Slice Test / 어노테이션 꼭 적어줘야함
class ReservationJpaRepositoryJpaTest {

    @Autowired
    private ReservationJpaRepository reservationJpaRepository;

    @Test
    void findFlightPriceAndCharge() {

        //given
        Integer userId = 10;

        //when
        List<FlightPriceAndCharge> flightPriceAndCharges = reservationJpaRepository.findFlightPriceAndCharge(userId);

        //then
        log.info("결과:" + flightPriceAndCharges);
    }
}

 

간단하게 테스트 하려고했더니 바로 오류남. 

 

보니까 테이블이 안 만들어져있네..인강처럼

 

 

반응형