두 손끝의 창조자

Spring Test에 @Sql 이 실패할 때 고려해야 할 것 본문

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"}
)
반응형
Comments