본문 바로가기

공부/Spring

[Boot] @SpringBootTest

@SpringBootTest

  • 통합 테스트를 제공하는 기본적인 스프링 부트 테스트 어노테이션
  • 애플리케이션이 실행될 때의 설정을 임의로 바꾸어 테스트를 진행할 수 있으며 여러 단위 테스트를 하나의 통합된 테스트로 수행할 때 적합함
  • 스프링 부트 1.4버전부터 제공되며, 스프링 부트 프로젝트를 만들면 메인 클래스와 함계 기본 제공됨
  • 실제 구동되는 애플리케이션과 똑같이 애플리케이션 컨텍스트를 로드하여 테스트함
  • (주의) 애플리케이션에 설정된 빈을 모두 로드하기 때문에 애플리케이션 규모가 클수록 느려짐
  • 기본 제공 클래스명은 프로젝트명에 'Tests'를 붙인 형태로 자동 생성됨
  • @RunWith 어노테이션을 사용하면 JUit에 내장된 러너를 사용하는 대신 어노테이션에 정의된 러너 클래스를 사용함
  • @SpringBootTest 어노테이션을 사용하여면 JUit 실행에 필요한 SpringJUit4ClassRunner 클래스를 상속받은 @RunWith(SpringRunner.class)를 꼭 붙여서 사용해야 함

Tests예제 1. 기본 생성

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class SoonApiApplicationTests {

    @Test
    public void contextLoads() {
    }
}

Tests예제 2.

import org.hamcrest.Matchers;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest(
        //value = "value=test",
        properties = {"property.value=propertyTest"},
        classes = {SoonApiApplication.class},
        webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class SoonApiApplicationTests {

    //@Value("${value}")
    //private String value;

    @Value("${property.value}")
    private String propertyValue;

    @Test
    public void contextLoads() {
        //Assert.assertThat(value, Matchers.is("test"));
        Assert.assertThat(propertyValue, Matchers.is("propertyTest"));
    }
}

-> @SpringBootTest 의 프로퍼티 중 value와 properties를 함계 사용하면 안됨

파라미터 설명

  • value : 테스트가 실행되기 전에 적용할 프로퍼티를 주입시킬 수 있음 즉, 기존의 프로퍼티를 오버라이드함

  • properties : 테스트가 실행되기 전에 {key=value} 형식으로 프로퍼티를 추가할 수 있음

  • classes : 애플리케이션 컨텍스트에 로드할 클래스를 지정할 수 있음 따로 지정하지 않으면 @SpringBootConfiguration을 찾아서 로드함

  • webEnvironment : 애플리케이션이 실행될 때의 웹 환경을 설정할 수 있음

  • @ActiveProfiles() : 프로파일 환경값을 부여하여 여러 환경을 사용가능함

  • 테스트에서 @Transactional을 사용하면 테스트를 마치고 롤백함


'공부 > Spring' 카테고리의 다른 글

[Boot] 스프링 부트 배치  (0) 2019.03.11
[Boot] @WebMvcTest  (0) 2019.02.15
[AvtiveMQ] 정리  (0) 2019.02.10
[Boot] 환경설정 관련  (0) 2019.02.10
[JPA] 스프링 부트 + jPA 사용시 참고....  (0) 2019.02.09