서론
프로덕션 코드에서 설정 파일(application.yml) 내에 환경 변수 처리해 놓은 값을 사용하는 코드에 관해 테스트 코드를 작성하려 할 때는
환경변수 세팅을 해주어야 합니다.
어떤 방법이 제일 나을지 찾아보니, 여러 방식이 있어서 정리합니다.
테스트 환경에서 환경변수 설정하는 방법
1번째 방법) 테스트 코드에서 바라보는 환경설정 파일을 별도로 생성하는 방법. ⚠️ 애플리케이션 컨텍스트가 로드되는 테스트 코드이어야 함. (feat. @SpringBootTest)
프로덕션 코드에서 환경 설정 값들은 src/main/resources/application.yml (혹은 application.property) 에 위치해있을텐데,
테스트 코드에서도 로직 수행 시에 필요한 환경 설정 값들을 별도의 환경 설정 파일로 구성할 수 있습니다.
위치 : src/test/resources/application.yml
그럼 테스트 코드를 수행할 때에는 해당 application.yml 파일을 바라보고 환경 변수들을 세팅할 것입니다.
이렇게 분리하면, 운영 환경에서는 MySQL, 테스트 환경에서는 H2를 사용하도록 하는 등 DB 설정, 그외 다양한 설정들을 프로덕션 코드와 테스트 코드에 대해 각각 분리할 수 있습니다.
설정 파일 :
테스트 코드 :
@SpringBootTest
class TestClass {
@Autowired
private Environment environment;
@Test
void test() {
// given
String property = environment.getProperty("test");
// then
assertThat(property).isEqualTo("1234");
}
}
Mockito 라이브러리를 이용하는 테스트 코드 환경에서는 아래 방법을 사용할 수 있습니다. (feat. @ExtendWith(MockitoExtension.class))
2번째 방법) Environment 객체를 가짜(mock) 객체로 대체하여 행위를 지정하는 방법.
@SpringBootTest나 @WebMvcTest 애노테이션을 이용해 애플리케이션 컨텍스트를 띄우는 테스트 코드라면 @MockBean을,
@ExtendWith(MockitoExtension.class) 애노테이션을 이용하고 있는 단위 테스트 코드라면 @Mock을 사용합니다.
@Mock
private Environment environment;
@Test
void test() {
// given
given(environment.getProperty("yourProperty")).willReturn("1234");
// then
assertThat(environment.getProperty("yourProperty")).isEqualTo("1234");
}
애플리케이션을 띄우는 테스트 코드든, Mockito를 이용하는 테스트 코드든 상관없습니다.
3번째 방법) build.gradle 파일에 'test' task로 설정하는 방법. ⚠️ Gradle 프로젝트에 해당하는 방법입니다.
이렇게 설정하면 Gradle이 테스트 실행 시 해당 환경 변수를 사용할 수 있도록 설정됩니다.
test { systemProperty "{환경변수 Key}", "{환경변수 Value}" systemProperty "{환경변수 Key}", "{환경변수 Value}" } |
build.gradle :
test {
systemProperty "test", "1234"
}
테스트 코드 :
@Test
void test() {
assertThat(environment.getProperty("test")).isEqualTo("1234");
}
끝으로,
'Test Code' 카테고리의 다른 글
[참고 글] Test Double (0) | 2024.05.17 |
---|---|
[JUnit5] @Mock 필드 초기화 시점에 따른 @BeforeAll 이슈 (@BeforeEach, 테스트코드의 라이프 사이클) (1) | 2024.04.07 |
[JUnit5] 실패 케이스 테스트하기 (0) | 2024.02.24 |
[테스트 코드] Controller Test Code / @WebMvcTest / 행위 검증 (0) | 2024.02.12 |