@Value 관련 환경변수 주입 테스트코드 질문..
267
작성한 질문수 13
@ActiveProfiles("test")
@SpringBootTest
class CategoryServiceTest {
@Autowired
private CategoryService categoryService;
@DisplayName("카테고리 목록들을 조회한다.")
@Test
void getAllCategories() {
System.out.println("222222222222222222");
}
}@Service
@RequiredArgsConstructor
public class KakaoApiService {
@Value("${social.kakao.apikey}")
private String kakaoApiKey;
@Value("${social.kakao.redirect_uri}")
private String kakaoRedirectUri;
}위와 같이 코드가 있을때 테스트 코드를 실행시키면
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'kakaoApiService': Injection of autowired dependencies failed
다음과 같은 에러가 발생하는데,, @SpringBootTest를 돌릴때 환경변수 주입을 못받아서 실패하는것 같은데 이럴 경우 어떻게 테스트를 진행해야할까요 ?? 전혀 관련 없는 서비스인데 에러가 터져서 진행이 안됩니다 ㅜㅜ..
```yml
spring:
profiles:
default: local
social:
kakao:
apikey: ${KAKAO_API_KEY}
redirect_uri: ${KAKAO_REDIRECT_URI}
jwt:
secret: ${JWT_SECRET}
access_expiration_time: 36000000
---
# 테스트 환경
spring:
config:
activate:
on-profile: test
h2:
console:
enabled: true
datasource:
url: jdbc:h2:mem:~/ChallengeApplication
driver-class-name: org.h2.Driver
username: sa
password:
jpa:
hibernate:
ddl-auto: create
show-sql: true
properties:
hibernate:
format_sql: trueyml은 전체는 아니지만 이렇게 구성되어 있습니다.

환경 변수주입은 ChallengeApplication에 다 넣어놨는데, 이게 테스트코드를 돌릴시에는 ChallengeApplication가 도는게 아니라 Junit 하위에 있는게 돌아서 환경변수 주입이 안된게 돌아서 실행이 안되더라구요 .. 보통 어떤식으로 하시나요 ? ㅠㅠ
답변 2
0
안녕하세요, bamho 님!
전체 프로젝트를 확인한 것은 아니지만, 보통 test yml 프로파일에 테스트용 값을 직접 명시하면 Value로 잘 주입될 거예요.
차선책으로 해당 객체의 사용처를 고려하여 MockBean 처리를 하는 방법도 있으니 참고해 주세요.
감사합니다. 🙂
0
test profile에 두기 때문에 ignore 처리해야 할 상황이 뭐가 있을지 잘 모르겠네요. 필요하다면 ignore 처리하고 없으면 굳이 하지 않아도 될 것 같아요.
0
근데 하나의 application.yml 에서 profile로 분리하여 test profile 에 두고 test profile에 직접 카카오 api key 같은 경우 직접 주입하면은 application.yml에 보이는거 아닌가요 ? ㅠㅠ
0
저는 @Value로 가져오려는 값 자체가 없는 것이 문제 상황이라고 이해해서, 테스트 key는 정말 key로써 기능하는 문자열이 아닌 아무 문자열(ex. "test123")을 넣으면 되지 않나 라고 생각했던 것인데요.
그런 상황이 아니고 테스트 상황에서도 실제로 동작하는 key를 써야한다면 MockBean과 같이 다른 방법으로 접근해볼 것 같아요.
0
안녕하세요, 인프런 AI 인턴입니다.
bamho님, 테스트 실행 시 환경 변수가 주입되지 않아 발생하는 문제를 해결하려면 다음과 같은 방법을 시도해 볼 수 있습니다:
- 테스트 환경 속성 명시: 테스트 코드에서 사용할 환경 변수를 명시적으로 설정할 수 있습니다.
@SpringBootTest에서properties속성을 사용하여 환경 변수를 설정할 수 있습니다.
@SpringBootTest(properties = {
"social.kakao.apikey=test-apikey",
"social.kakao.redirect_uri=http://localhost/test-redirect"
})
class CategoryServiceTest {
// 테스트 코드 내용
}
테스트 속성 파일 사용: 테스트에 필요한 속성을
src/test/resources에application-test.yml또는application-test.properties파일에 정의하고, 이를 활성화하는 방법입니다. 설정 파일에서 필요한 값을 직접 정의해 두면 좋습니다.Mock 사용:
@MockBean을 사용하여KakaoApiService를 목(Mock)으로 교체하여 환경 변수에 대한 의존성을 제거하는 방법도 있습니다.
위의 방법 중 적합한 방법을 사용해 보시기 바랍니다. 추가적으로 질문이 있으시면 언제든지 문의주세요! 🙏

정보 이해에 도움이 되길 바랍니다.
private 상수 테스트 관련 질문
0
82
1
void는 어떻게 테스트하나요..? void로 애초에 코딩하면 안되나요??
0
124
2
커버리지는 어떻게 활용하시는지 궁금합니다.
0
159
2
테스트 문서화 질문입니다
0
104
2
단위테스트 질문이 있습니다
0
94
2
컨트롤러는 모킹을 한 이유가 궁금합니다.
0
100
2
ERD 가장자리에 있는 도메인 테스트 질문
0
87
2
DTO 검증 필드에 대한 테스트 코드 작성은 어디까지?
0
132
2
OrderCreateRequest DTO에 대해서 궁금한점
0
101
2
고전파의 테스트 대역 사용 대상, 공유 의존성
0
154
2
계층 관련 질문이 있습니다.
0
137
3
'코틀린'에서는 빌더를 따로 쓰지 않는데, 이 때는 어떻게 test fixture를 만드시는지 궁금합니다
1
122
2
혹시 update 로직은 어떻게 테스트하나요? (@Setter?)
0
133
2
단위테스트와 통합테스트의 경계가 궁금합니다.
0
227
2
Service+Repository 통합테스트 관련 질문입니다.
0
149
2
OrderControllerDocsTest 작성 해봤는데요. 날짜 형식이 이상하게 나와요
0
183
2
test 용 .yml
0
89
2
throws Exception
0
78
2
카페키오스크 클래스 문의 ,,
0
87
2
Rest docs 문서용 테스트코드를 따로 작성해야 되나요?
0
171
2
테스트 코드에서 필요한 생성자
0
137
1
tearDown 순서
0
115
2
@Builder 생성자 private
0
135
2
@DisplayName gradle / intellJ
0
92
2





