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를 사용해서 테스트하기▼
'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 |