`main/resources/application.properties`에 profile과 데이터베이스의 설정을 추가한다.
3. application.properties (test/resources/) 설정
spring.profiles.active=test
`test/resources/application.properties`에 profile 설정을 추가한다.
테스트 케이스는 test 패키지 내의 `application.properties`의 설정을 우선적으로 적용하니 참고하자.
4. 테스트 코드 작성
@Transactional
@SpringBootTest
class UserRepositoryTest {
@Autowired
UserRepository userRepository;
@Test
void save() {
User user = new User("star", "0121");
User savedUser = userRepository.save(user);
assertThat(savedUser.getUserName()).isEqualTo("star");
assertThat(savedUser.getPhoneNum()).isEqualTo("0121");
}
@Test
void findById() {
User user = new User("cckk", "038");
User savedUser = userRepository.save(user);
User foundUser = userRepository.findById(savedUser.getId()).orElse(null);
assertThat(foundUser.getUserName()).isEqualTo("cckk");
}
//이하 생략
}
테스트 데이터 초기화를 위해 `@Transactional`을 사용한다.
테스트에서 해당 애너테이션을 사용하면 테스트 종료 시 트랜잭션을 자동으로 롤백하기 때문에 데이터가 초기화될 수 있는 것이다.
5. schema.sql 작성
create table users (
id bigint generated by default as identity,
user_name varchar(10),
phone_num varchar(25),
primary key (id)
);
`test/resources/schema.sql`에 테이블 생성 쿼리를 작성하면 테스트를 실행할 때마다 테이블을 자동으로 생성해 준다.
해당 파일의 경로와 파일명은 변경해서는 안되니 주의하자.
이제 테스트를 반복적으로 실행해도 모두 성공할 것이다.
만약 테스트에 실패한다면 테스트 로직에 문제는 없는지, SQL 쿼리에 오타는 없는지, 사용하는 테이블명이 예약어는 아닌지 점검해 보자.
위에서 언급한 모든 설정 파일은 경로가 특히 중요하다.
`application.properties`와 `schema.sql`의 경로도 다시 체크해 보자.