본문 바로가기

Java/Spring

테스트에서 환경변수를 주입하는 가장 가벼운 방법

Spring Boot 단위 테스트에서 MockEnvironment와 TestPropertyValues 활용하기

 

Spring Boot로 개발하다 보면 이런 고민이 생깁니다.

 

“이 설정값이 제대로 들어오는지 테스트해보고 싶은데,
굳이 무거운 @SpringBootTest까지 써야 할까?”

 

이럴 때 정말 유용한 방법이 있습니다.

바로 MockEnvironmentTestPropertyValues 조합입니다.

 

이 글에서는 언제 쓰면 좋은지, 언제 쓰면 안 되는지, 그리고 코드 예제까지 빠르게 정리합니다.

 

 

언제 필요한가?

 

간단한 단위 테스트에서 설정 값이나 환경 변수만 살짝 주입해보고 싶을 때 아주 유용합니다.

 

예를 들어 이런 경우입니다.

 

  • 특정 설정 값이 잘 들어오는지 확인하고 싶을 때
  • @ConditionalOnProperty가 예상대로 동작하는지 확인할 때
  • @ConfigurationProperties 바인딩을 빠르게 테스트해보고 싶을 때
  • ApplicationContext 없이 유닛 테스트만 하고 싶을 때

 

 

예제 코드

 

아래는 단순한 프로퍼티 값을 넣고 검증하는 코드입니다.

단위 테스트를 위한 MockEnvironmentTestPropertyValues만으로 충분합니다.

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 등을 활용하는 것이 맞습니다.

 

 

마무리하며

 

테스트라고 해서 무조건 무겁고 복잡할 필요는 없습니다.

필요한 만큼만 확인하고 넘어가는 테스트도 분명히 의미가 있습니다.

 

MockEnvironmentTestPropertyValues

그런 가벼운 테스트를 할 때 꼭 알아두면 좋은 도구입니다.