테스트 메서드 마다 Environment variables 설정이 불편...
강의시나리오 대로 진행하다보니 살짝 불편한 부분이 있어서..
(어쩜 중간에 코멘트가 있었는데 놓친것일 수도..)
서비스 설정 중 메일발송 설정 정보를 실행속성으로 구성하는데
테스트도 동일하게 구성하다보니(test-application.properties )
Intellij >Edit Configurations > JUnit 실행인스턴스 별 Environment variables 를 설정해줘야 실행이 되는듯 합니다.
테스트 메서드를 만들때마다 실행인스턴스를 설정해야하는게 불편해서
그냥 메일발송 설정을 test-application.properties 에 하드코딩하고 진행해봅니다.
(혹시.. 다른 더 스마트한 방법이 있을까? Intellij ? spring?)
[확인1]
'테스트 추가하기: h2를 이용한 repository 테스트' 강의 1:16초를 보면
git에서 받은 application.properties 파일과 강의의 소스가 다른것 으로 보입니다.
Environment variables 에서 설정한 속성이 없어서 해당 강의에서는 불편함 없이 진행된 것 으로 이해했습니다.
[확인2] 그런데
'토이 프로젝트 살펴보기' 강의 7:42 에 확인되는 설정정보는
git 소스와 동일하것으로 확인됩니다.
강의를 훑어볼때는 그냥 넘어갔는데, 따라하며 보니 눈에 밟히는게 좀 있네요.
제가 놓친부분이라면 양해 바라며, 시나리오 상 연결부분이 필요한 내용이면 코멘트 부탁드립니다.
저와 같이 길잃은 양들을 살펴주소서~
[git 설정파일]
답변 1
1
안녕하세요, 인프런 AI 인턴입니다.
pwmetus님 질문에 대해 안내드리겠습니다.
IntelliJ IDEA에서 테스트 메서드마다 환경 변수(Environment variables)를 설정하는 것이 번거로운 경우, 다음과 같은 방법을 활용할 수 있습니다:
테스트 범위의 환경 변수를
application.properties나application.yml파일과 같은 Spring Boot의 외부화된 구성(externalized configuration)을 활용하여 설정합니다. 각 테스트마다 이러한 파일에 필요한 환경 설정을 명시하여 사용할 수 있습니다.Spring Boot 테스트 유틸리티를 사용하여 특정 테스트 환경변수를 프로그래매틱하게 추가할 수 있습니다. 예를 들어,
@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("org=Spring", "name=Boot").applyTo(environment);
assertThat(environment.getProperty("name")).isEqualTo("Boot");
}
}
이 방법을 통해, IntelliJ의 실행 설정에서 매번 환경 변수를 지정할 필요 없이 테스트마다 필요한 환경 변수를 간편하게 설정할 수 있습니다.
참조하신 ‘테스트 추가하기: h2를 이용한 repository 테스트’와 ‘토이 프로젝트 살펴보기’ 강의에서 다루는 설정 방법들은 강의 상황에 맞게 최적화된 설정이므로, 각 상황에 맞게 적절한 방법을 선택하여 적용하는 것이 좋습니다.
보다 자세한 정보는 Spring Boot 공식 문서 참조를 권장드립니다:
- Spring Boot 테스트 유틸리티: https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#features.testing.utilities.test-property-values
질문에 대해 충분한 답변이 되었기를 바라며, 추가적인 궁금증이 있으시면 질문해주세요.
UserService, CertificationService 책임 분리 기준 질문
0
28
1
service.port 패키지로 이동한 UserRepository가 infrastructure에 있는 UserEntity에 의존
0
59
1
Service 소형 테스트 질문
0
83
1
조회 시 엔티티를 조회하는 것이 아닌QueryDSL을 많이 사용 시 Dto는 어떻게 하나요?
0
116
1
controller 의 port 패키지의 service 인터페이스 사용
0
72
1
빌드 문제
0
92
1
빌드 안 되시는 분들 참고
0
102
1
update에서 Repository.save
0
105
1
최종 완성된 코드를 받아 볼 수 있을까요?
0
156
1
의존성 역전으로 해결한 외부의존성?
0
162
1
좋은 설계
0
180
1
Controller에 테스트
0
139
1
JPA가 아닌 Mapper 아키텍처 기반 테스트 코드 작성
0
242
0
영속성 객체 구분으로 인한 JPA와 Querydsl의 Projection 사용
0
224
1
인프라계층 구현체와 테스트 구현체에 대한 질문
0
223
1
실습 코드 커밋
0
372
1
UserEntity 메서드
0
293
2
CertificationServiceTest에서 MailSender 인터페이스가 아닌 FakeMailSender를 이용하는 것
0
217
1
레이어드 아키텍처 개발에 대하여
0
231
1
BDDMockito의 when을 사용한 코드가 given 절에 있는 이유가 궁금합니다.
0
223
1
테스트에서 주입과 생성
0
198
1
프로젝트 코드는 제공해주시지 않는건가요?
0
382
2
개선된 아키텍처의 구조
0
277
1
서비스 레이어의 단위 테스트 범위 고민
0
188
1





