springboot test / junit / unittest/ /통합테스트 / .sql / query / 쿼리실행 / 초기 데이터 세팅 / setup / @Sql 대신 사용
Spring Test 에서 @Sql 을 code 로
아래와 같은 annotation 을
@JooqTest
@Sql({"classpath:myquery1.sql", "classpath:myquery2.sql"})
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class MyTests {
...
}
아래처럼 변경했다. 아래는 특정 profile 이 아닐때만 sql 을 실행하도록 했다.
@JooqTest
// @Sql({"classpath:myquery1.sql", "classpath:myquery2.sql"})
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class MyTests {
// require: @JooqTest
@Autowired
DSLContext ctx;
@Autowired
DataSource dataSource;
@Autowired
Environment env;
ProductStatusBgJobProcessor backgroundJobProcessor;
@BeforeAll
void beforeAll() {
runSqlInitData(dataSource);
}
@BeforeEach
void setUp() {
...
}
@Test
void myTest1() throws Exception {
...
}
private void runSqlInitData(DataSource dataSource) {
final String EXCLUDE_PROFILE = "testnocontainer";
var activeProfiles = env.getActiveProfiles();
if (activeProfiles.length <= 0 || !activeProfiles[0].equals(EXCLUDE_PROFILE)) {
// when not 'testnocontainer' profile
ResourceDatabasePopulator populator = new ResourceDatabasePopulator();
populator.addScripts(
new ClassPathResource("myquery1.sql"),
new ClassPathResource("myquery2.sql"));
populator.setSeparator(";");
populator.execute(dataSource);
}
}
}
Spring, Integration Test 에서 sql file을 실행하기
sql script 를 실행하기 위해 다음 4개의 함수를 사용할 수 있다.
- org.springframework.jdbc.datasource.init.
ScriptUtils
: SQL 스크립트가 parse되고 실행되는 방법을 완전히 제어할 때 사용 - org.springframework.jdbc.datasource.init.
ResourceDatabasePopulator
- 내부적으로
ScriptUtils
를 사용
- 내부적으로
- org.springframework.test.context.junit4.
[AbstractTransactionalJUnit4SpringContextTests](https://docs.spring.io/spring-framework/reference/testing/testcontext-framework/support-classes.html#testcontext-support-classes-junit4)
- 내부적으로
ResourceDatabasePopulator
를 사용
- 내부적으로
- org.springframework.test.context.testng.
[AbstractTransactionalTestNGSpringContextTests](https://docs.spring.io/spring-framework/reference/testing/testcontext-framework/support-classes.html#testcontext-support-classes-testng)
- 내부적으로
ResourceDatabasePopulator
를 사용
- 내부적으로
댓글 없음:
댓글 쓰기