본문 바로가기

Spring/Test

[Springboot] SpringBoot 테스트 @SpringBootTest

1. @SpringBootTest?

 

1) 사용 목적

- 애플리케이션의 모든 구성요소를 로드하여 테스트 환경을 설정

- 실제 애플리케이션과 유사한 테스트를 제공

cf) @Runwith
JUnit에서 기본적으로 제공하는 러너가 아닌 스프링 러너를 사용하는 경우 사용 

 

2) 코드 예시

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest; 

@SpringBootTest
public class PropertiesTest {
    @Test
    public void testMehtod() { 
	}
}

 

 

2. @SpringBootTest의 속성

속성 설명
classes 테스트할 클래스 지정
(생략 시 어플리케이션에 정의된 모든 빈 생성, classes를 작성하여 불필요한 메모리 낭비를 피하라고 하긴 하는데 특정 클래스 기반으로 한정된 스프링 빈들만 로드하게되면 가볍게 테스트할 수 있지만 보통 통합테스트나 종단간 테스트에서는 전체 애플리케이션 컨텍스트를 로드하는것이 테스트 정확성과 테스트 환경과의 유사성 만들 수 있음)
properties 1) 외부 proprties 사용: 테스트에 사용할 property들을 "key:value"형태로 추가
2) properties파일에 설정된 property 재정의
webEnvironment - 어플리케이션이 실행될 때 웹과 관련된 환경 설정
- 생략 시 기본 값으로 WebEnvironment.MOCK이 설정됨(이 설정에 의해 서블릿 컨테이너가 모킹됨)
-@SpringBootTest(webEnvironment=WebEnvironmemnt.MOCK) 설정으로 모킹한 객체를 의존성 주입 받으려면 @AutoConfigureMockMvc를 클래스 위에 추가해야함

 

1) classes

테스트할 클래스 지정(생략 시 어플리케이션에 정의된 모든 빈 생성, classes를 작성하여 불필요한 메모리 낭비를 피하자)

@SpringBootTest(classes = PostController.class)

 

2) properties

a. 외부 properties  사용

# application.properties 
# Test Property Setting 
author.name=sky
author.age=30

 

- Test

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.core.env.Environment;

import sky.spring.controller.BoardController;

@SpringBootTest
public class PropertiesTest {
	@Autowired
	Environment environment;
	
	@Test
	public void testMethod() {
		System.out.println("이름: " + environment.getProperty("author.name"));
		System.out.println("나이: " + environment.getProperty("author.age"));		
	}

}

 

b. properties 재정의

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.core.env.Environment;

import sky.spring.controller.BoardController;

@SpringBootTest(classes = BoardController.class, properties = {"author.name=Kim", "aurthor.age=40", "author.nation=Korea"})
public class PropertiesTest {
	@Autowired
	Environment environment;
	
	@Test
	public void testMethod() {
		System.out.println("이름: " + environment.getProperty("author.name"));
		System.out.println("나이: " + environment.getProperty("author.age"));
		System.out.println("국가: " + environment.getProperty("author.nation"));
		
	}

}

 

 

3) WebEnvironment

@SpringBootTest(webEnvironment = WebEnvironment.MOCK)

 

WebEnvironment 옵션

상수 설명
MOCK - 모킹된 서블릿 컨테이너를 제공하기 때문에 내장 서버(톰캣)를 실행하지 않고 모의(Mock) 환경에서 테스트 실행
- @AutoConfigureMockMvc를 사용해서 MockMvc 객체를 주입 받아서 테스트해야함
RANDOM_PORT - 랜덤한 포트로 내장 톰캣을 구동해서 서블릿 컨테이너 초기화
- 정상적인 서블릿 테스트 가능
- 서블릿 컨테이너를 모킹하지 않기 때문에 MockMvc 객체 목업X, 실제 컨트롤러를 생성할 TestRestTemplate 객체를 주입해서 컨트롤러 요청해야함(TestRestTemplate 객체를 이용하면 특정 URL로 서버에 요청 할 수 있으며 응답 결과도 검증 가능)
DEFINED_PORT - RANDOM_PORT와 동일하지만 application.properties 파일에 설정된 서버 포트 사용
NONE - 서블릿 기반의 환경 자체를 구성하지 않음

 

 

MockMvc를 사용해서 테스트하기▼

https://k-sky.tistory.com/803

 

[Springboot] MockMvc를 이용해서 테스트하기

- 목(Mock): 테스트를 위해서 만든 모형 - 모킹(Mocking): 테스트를 위해 실제 객체와 비슷한 모의 객체를 만드는 것 - 목업(Mock-Up): 모킹한 객체를 메모리에서 얻어내는 과정 - 웹 어플리케이션에서 Con

k-sky.tistory.com

 

'Spring > Test' 카테고리의 다른 글

[Springboot] MockMvc를 이용해서 테스트하기  (1) 2024.02.16
AssertJ  (0) 2022.12.01
TDD, 대역을 이용한 테스트  (0) 2022.11.30
TDD, 테스트 코드의 구성  (0) 2022.11.30
TDD 테스트 주도 개발, 기능 명세와 설계  (0) 2022.11.27