Spring
Spring Test에 @Sql 이 실패할 때 고려해야 할 것
codinglog
2022. 4. 1. 14:05
SpringTest로 테스트 실행 전 Sql을 실행하려면 클래스나 메소드에 @Sql
애노테이션으로 미리 작성된 쿼리를 실행할 수 있다.
만약, 실행했는데
java.lang.IllegalStateException: Failed to execute SQL scripts for test context ---- 생략
at org.springframework.util.Assert.state(Assert.java:97) ~[spring-core-5.3.13.jar:5.3.13]
at org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener.executeSqlScripts(SqlScriptsTestExecutionListener.java:254) ~[spring-test-5.3.13.jar:5.3.13]
at org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener.lambda$executeSqlScripts$0(SqlScriptsTestExecutionListener.java:201) ~[spring-test-5.3.13.jar:5.3.13]
at java.lang.Iterable.forEach(Iterable.java:75) ~[?:?]
이런 에러가 나면 에러만 봐서는 원인을 알 수가 없다.
이번 경우는 에러난 지점에 가서 브레이크 포인트를 넣고 디버깅 해보니 데이터소스를 찾아오지 못 했다.
왜 그럴까 생각해보니 이 애플리케이션에 등록된 데이터소스가 2개이어서 둘중하나를 결정 못한듯 했다.
그러면 데이터소스를 지정을 해줘야 한다.
이를 위해 @SqlConfig
애노테이션을 활용한다.
@Sql(config = @SqlConfig(transactionManager = "tx1
value = {"/testdata/menu.sql"}
)
반응형