개발용, 테스트용 yml파일을 설정하였다.

해당 레포지터리가 엔티티와 연결되어 잘 작동하는지 확인해보자.
테스트 파일에 직접 파일을 작성해도 되지만 인텔리J에서 제공하는 단축키인 커멘드+shift+T 를 사용하여 테스트 파일을 생성하였다.
테스트해볼 기능은 다음과 같다.
1. 엔티티에 데이터를 넣었을 때 값이 저장이 되는지.
2. findByName 메서드가 작동을 하는지.
package reproject.calendars.repository;
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.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.transaction.annotation.Transactional;
import reproject.calendars.entity.Calendar;
import java.util.Optional;
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
import static org.junit.jupiter.api.Assertions.*;
@SpringBootTest
-> 해당 에너테이션이 있을 시 테스트 실행 시 스프링에 모든 bean이 실행된다.
@ActiveProfiles("test")
-> application-{profiles}.yml 에서 "" 안의 값을 profiles로 읽는다.
application-test.yml을 실행하도록 설정한다.
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
-> 스프링은 기본 실행시 데이터베이스를 embedded모드로 실행시키려한다. 해당 기능을 NONE을 통해 방지하여
application-test.yml에 있는 mem모드로 강제로 실행시킨다.
@Transactional
-> 테스트 메서드 하나 실행 시 데이터를 초기화시켜준다.
class CalendarRepositoryTest {
@Autowired
private CalendarRepository calendarRepository;
@Test
void 캘린더_엔티티_생성() {
//GIVEN
Calendar calendar = new Calendar("test", "test");
//WHEN
Calendar saveCalendar = calendarRepository.save(calendar);
//THEN
assertNotNull(saveCalendar.getId());
assertEquals("test", saveCalendar.getName());
}
@Test
void findByName_테스트() {
//GIVEN
Calendar calendar = new Calendar("test1", "test1");
calendarRepository.save(calendar);
//WHEN
Optional<Calendar> saveCalendar = calendarRepository.findByName("test1");
//THEN
assertThat(saveCalendar.isPresent());
assertThat(saveCalendar.get().getName()).isEqualTo("test1");
-> Optional로 감싸져 있는 객체는 null값일 수도 있으므로 바로 .getName()을 사용하지 못한다.
.get()으로 Optional을 한번 벗겨주고 .getName()을 사용해야한다.
}
}
실제로 test파일이 application-test.yml에서 mem 모드의 데이터베이스를 사용하고 있는지 확인하고 싶다면 application-test.yml에 해당 코드를 추가하자.
logging:
level:
org.springframework: DEBUG # 스프링 관련 로그를 DEBUG 수준으로 출력
org.hibernate.SQL: DEBUG # Hibernate가 실행하는 SQL 쿼리 로그 출력
test파일을 실행 후 터미널 로그에서 test를 확인해보자. 검색이 된다면 잘 연결이 된 것이다.

테스트도 무사 통과하였다!