본문 바로가기

개발

Spring Boot 테스트 코드에서 SQL Script 로 테스트 데이터 생성 방법(Spring Boot Test Data Initialize By SQL Script)

728x90

Spring Boot 에서 Test 코드를 실행하기 위해서 Test Data 가 필요한 경우가 있다. 최근에는 Liquebase or Flyway 를 이용하여 Test Data 를 초기화 해주는 경우가 많이 있지만, 이런 설정이 되지 않은 경우에는 아래와 같이 @Sql 어노테이션을 사용하면 쉽게 처리 할 수 있다.

 

이 방법은 org.springframework.test.context.jdbc.Sql 를 이용하는 방법으로 아래와 같이 사용 할 수 있다.

 

JUnit Test Code 에서 @BeforeClass, @Sql 을 이용하여 Table 을 생성할 schema-h2.sql, data-h2.sql 을 실행하도록 설정한다.

 

@BeforeClass
@Sql({"classpath:testdb/schema-h2.sql", "classpath:testdb/data-h2.sql"})
public static void setUpBeforeClass() throws Exception {
	logger.debug("Test Data Create And Insert!");
    }

 

이렇게 추가를 하면 테스트 코드가 실행 되기 전 Table 과 Data 를 적재가 되어 쉽게 테스트를 할 수 있다.

 

[전체 코드 예제]

import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.MethodSorters;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.PropertySource;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.jdbc.Sql;
import org.springframework.test.context.junit4.SpringRunner;


@SpringBootTest(
webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT
, properties = "spring.profiles.active=testrun"
)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
@RunWith(SpringRunner.class)
@ActiveProfiles("testrun")
@PropertySource("classpath:application-testrun.properties")
public class ServiceTest {

  private final static Logger logger = LoggerFactory.getLogger(ServiceTest.class);

  @Autowired
  Service service;

  @BeforeClass
  @Sql({"classpath:testdb/schema-h2.sql", "classpath:testdb/data-h2.sql"})
  public static void setUpBeforeClass() throws Exception {
 	 logger.debug("Test Data Create And Insert!");
  }
  @Test
  public void test01_ServiceTest() {
  	logger.debug("test01_ServiceTest Run!");

    ....
  }
}