1. 원인
application.yml을 각각 운영과 개발 환경으로 분리했을 경우 JUnit으로 테스트할 때, DB 접속정보가 운영환경으로 인식되었기 때문에, JPA 기능을 사용할 수 없는 경우
필자는 DB 접속정보를, 시크릿에다 등록해놓았기 때문에, application.yml에 DB접속 정보를 직접 넣지않고, 환경변수로 세팅해놓았다. 그러다보니, 모든 접속정보가 null로 들어오기 때문에 해당 오류가 발생한 것이다.
2. 해결방법
2-1. @ActiveProfiles("profile 명")
@ActiveProfiles 어노테이션으로 개발용 application에서 지정한 프로필명을 해당 테스트 클래스에 명시해주면 테스트 시 해당 profile의 application.yml로 인식한다.
# application-dev.yml
spring:
config:
activate:
on-profile: dev
프로필명은 'on-profile' 속성으로 지정해주면 된다.
2-2. src/test/resources/ 경로에 테스트용 application.yml 파일 추가
운영, 개발용 application.yml이 있었다면, JUnit 테스트용 application.yml을 하나 더 추가해주면 @ActiveProfiles 어노테이션을 명시하지 않아도 사용가능하다. 여기서, 주의사항은 src/test/resources/application.yml 파일에서는 'on-profile' 설정을 사용하지 않는 것이다. (인텔리제이에서만 된다고 하는데, 다른 툴을 사용하시는 분은 한번 테스트해보길 바란다.)
'웹 개발 공부 : Back-end > JAVA - Spring' 카테고리의 다른 글
1. 원인
application.yml을 각각 운영과 개발 환경으로 분리했을 경우 JUnit으로 테스트할 때, DB 접속정보가 운영환경으로 인식되었기 때문에, JPA 기능을 사용할 수 없는 경우
필자는 DB 접속정보를, 시크릿에다 등록해놓았기 때문에, application.yml에 DB접속 정보를 직접 넣지않고, 환경변수로 세팅해놓았다. 그러다보니, 모든 접속정보가 null로 들어오기 때문에 해당 오류가 발생한 것이다.
2. 해결방법
2-1. @ActiveProfiles("profile 명")
@ActiveProfiles 어노테이션으로 개발용 application에서 지정한 프로필명을 해당 테스트 클래스에 명시해주면 테스트 시 해당 profile의 application.yml로 인식한다.
# application-dev.yml
spring:
config:
activate:
on-profile: dev
프로필명은 'on-profile' 속성으로 지정해주면 된다.
2-2. src/test/resources/ 경로에 테스트용 application.yml 파일 추가
운영, 개발용 application.yml이 있었다면, JUnit 테스트용 application.yml을 하나 더 추가해주면 @ActiveProfiles 어노테이션을 명시하지 않아도 사용가능하다. 여기서, 주의사항은 src/test/resources/application.yml 파일에서는 'on-profile' 설정을 사용하지 않는 것이다. (인텔리제이에서만 된다고 하는데, 다른 툴을 사용하시는 분은 한번 테스트해보길 바란다.)