Spring Boot 단위 테스트에서 MockEnvironment와 TestPropertyValues 활용하기
Spring Boot로 개발하다 보면 이런 고민이 생깁니다.
“이 설정값이 제대로 들어오는지 테스트해보고 싶은데,
굳이 무거운 @SpringBootTest까지 써야 할까?”
이럴 때 정말 유용한 방법이 있습니다.
바로 MockEnvironment와 TestPropertyValues 조합입니다.
이 글에서는 언제 쓰면 좋은지, 언제 쓰면 안 되는지, 그리고 코드 예제까지 빠르게 정리합니다.
언제 필요한가?
간단한 단위 테스트에서 설정 값이나 환경 변수만 살짝 주입해보고 싶을 때 아주 유용합니다.
예를 들어 이런 경우입니다.
- 특정 설정 값이 잘 들어오는지 확인하고 싶을 때
- @ConditionalOnProperty가 예상대로 동작하는지 확인할 때
- @ConfigurationProperties 바인딩을 빠르게 테스트해보고 싶을 때
- ApplicationContext 없이 유닛 테스트만 하고 싶을 때
예제 코드
아래는 단순한 프로퍼티 값을 넣고 검증하는 코드입니다.
단위 테스트를 위한 MockEnvironment와 TestPropertyValues만으로 충분합니다.
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.util.TestPropertyValues;
import org.springframework.mock.env.MockEnvironment;
import static org.assertj.core.api.Assertions.assertThat;
class MyEnvironmentTests {
@Test
void testPropertySources() {
// 가짜 환경 객체 생성
MockEnvironment environment = new MockEnvironment();
// 테스트용 프로퍼티 값 주입
TestPropertyValues.of(
"jwt.secret=your-secret-key",
"spring.data.mongodb.uri=mongodb://localhost:27017/testdb"
).applyTo(environment);
// 값이 제대로 들어왔는지 확인
assertThat(environment.getProperty("jwt.secret")).isEqualTo("your-secret-key");
assertThat(environment.getProperty("spring.data.mongodb.uri"))
.isEqualTo("mongodb://localhost:27017/testdb");
}
}
핵심 개념 요약
항목설명
| MockEnvironment | 진짜 Environment 대신 쓰는 테스트용 환경 객체 |
| TestPropertyValues | "key=value" 형태의 설정 값을 주입해주는 유틸 클래스 |
| 장점 | 빠르고 가볍다. ApplicationContext 없이도 값 주입 가능 |
| 주의 | 실제 빈에 주입되는 @Value, @ConfigurationProperties와는 별개다 |
언제 쓰면 안 될까?
이 방법은 진짜 컨텍스트 없이 값만 테스트할 때 사용해야 합니다.
다음과 같은 경우에는 적합하지 않습니다.
- @Value가 잘 주입됐는지 확인하고 싶을 때
- 실제 Bean이 어떻게 동작하는지까지 확인하고 싶을 때
이럴 때는 @SpringBootTest, @TestPropertySource, @DynamicPropertySource 등을 활용하는 것이 맞습니다.
마무리하며
테스트라고 해서 무조건 무겁고 복잡할 필요는 없습니다.
필요한 만큼만 확인하고 넘어가는 테스트도 분명히 의미가 있습니다.
MockEnvironment와 TestPropertyValues는
그런 가벼운 테스트를 할 때 꼭 알아두면 좋은 도구입니다.
'Java > Spring' 카테고리의 다른 글
| Kafka Listener 예외 반복 실행되는 이유 그리고 해결 (1) | 2025.08.15 |
|---|---|
| 전략 패턴에서 Object vs 제네릭, 왜 나는 제네릭을 선택했을까? (2) | 2025.07.30 |
| Spring에서 확장성을 고려한 채팅방 생성 로직 전략 패턴 적용 (1) | 2025.07.24 |
| Spring STOMP + Kafka 구조에서 Kafka만 사용하는 설정 변경 후 404 에러 (3) | 2025.07.22 |
| Spring Boot에서 application.yml 설정 분리하기 (0) | 2025.07.20 |