개발자

Spring Unit test @Value

2024년 06월 24일조회 1,475

프로젝트 중 외부에 노출되면 안되는 값이 있어 환경변수로 설정한 후 @Value 어노테이션을 사용해서 값을 사용했습니다. 테스트 코드를 작성하며 통합테스트를 진행하기엔 자원소모가 크다 생각하여 유닛테스트로 테스트 코드를 작성했습니다. 그런데 유닛테스트에서는 @Value에 의존성주입이 안되서 해결방법을 찾고있습니다. 제가 찾아본 해결 방법으로는 1. @SpringBootTest 사용 2. Reflection 사용 3. 생성자를 통한 주입 이렇게 3가지 방법이 있는데 2,3번 모두 테스트코드 내에서 직접 값을 입력해줘야해서 환경변수로 값을 보호하는 이점이 사라진다고 생각이 들었습니다. 이런 상황에선 어떻게 하는게 좋을까요? 환경변수가 들어가는 값을 테스트 할때 유닛테스트를 사용하는 접근방식부터 잘못된걸까요..? 현업에선 이런 민감한 정보를 어떻게 처리하는지 궁금합니다!

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.

답변 1

인기 답변

이양일님의 프로필 사진

안녕하세요! 실제로 말씀하신 3가지의 케이스 모두 현업에서 상황에 맞게 쓰고 있는 방식입니다. 1. @SpringBootTest 를 사용하는 케이스 - 설정값이 의도한대로 @Value 를 선언한 필드에 적용이 되는지 확인할 수 있다. 2. Reflection 사용 - 생성자가 아닌 Field Injection 으로 적용되었을 때 사용하는 방법 - Spring 에서 제공하는 ReflectionTestUtils 를 통해 사용합니다 3. 생성자 혹은 setter 사용 - Field Injection 이 아닌 생성자나 setter 를 사용할 경우 유닛테스트를 진행하시는 것이기 때문에 테스트코드 내에서 직접 값을 입력해주는게 크게 문제가 된다고 생각하지는 않습니다. 오히려 환경변수 값이 내가 의도한 값으로 들어왔을 때 의도한대로 동작하는지를 확인할 수 있어서 다양한 환경변수 값을 주입해보며 정상적으로 동작하는지 확인해보시면 좋을것 같습니다. 저의 짧은 지식이 조금이나마 도움이 되시길 바랍니다.

이희수님의 프로필 사진

이희수

작성자

세종대학교 데이터사이언스2024년 06월 28일

실제 환경변수 값이 아니라 테스트 코드안에서 지정한 값으로 변수를 지정하여 테스트를 할 수있는건데 제가 생각을 잘못했네요… 친절한 답변 정말 감사드립니다!!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!