본문 바로가기

🤔Troubleshooting

Failed to load ApplicationContext - 프로덕션 코드와 테스트 코드 sql문 다르게 실행하기

환경

웹 어플리케이션 프로젝트로 지하철 노선도를 만드는 프로젝트를 진행해보았다.

테스트 데이터를 매번 수작업으로 입력하는 것이 번거로워 resources 의 schema.sql 이라는 파일에 insert 쿼리로 데이터를 직업 입력해주었다.

 

이렇게 하니 어플리케이션을 실행하면 따로 데이터를 입력하지 않아도 insert 쿼리를 자동으로 실행되어 데이터가 들어가 있는 것을 확인할 수 있었다.

 

문제

하지만 문제는 테스트할 때였다.

만약 테스트에서 어떠한 데이터를 생성하는 과정이 있는데 그 과정에서 insert 쿼리의 내용과 충돌되는 부분이 있다면(혹은 다른 여러가지 이유로 문제가 발생할 수도) 에러가 발생하는 것이었다.

Failed to load ApplicationContext 

 

이를 해결하기 위해 테스트에서는 create table 쿼리문은 실행을 하되 insert 문은 실행을 하지 않는 방법을 찾아보았다.

 

해결

먼저 insert 문과 create 문을 분리하여 2개의 파일로 만든다.

 

insert문의 내용은 모두 data.sql 이라는 파일로 옮긴 상태이다.

schema.sql 에는 create table 쿼리만 있고 data.sql 에는 insert 쿼리만 있다.

그리고 application.propertices 에

spring.datasource.data=classpath:data.sql

위의 내용을 추가해준다.

그러면 어플리케이션 실행시 data.sql 에 있는 쿼리문을 읽어와 데이터로 추가하게 된다.

 

그리고 Test 폴더 아래에도 application.propertices 를 생성하고 이번에는

spring.datasource.data=

위와 같이 공란으로 설정하면 Test 에서는 data.sql 을 읽어 오지 않는다.

test폴더 아래의 application.propertices

 

반응형