인프런 커뮤니티 질문&답변

bamho님의 프로필 이미지
bamho

작성한 질문수

Practical Testing: 실용적인 테스트 가이드

Business Layer 테스트 (1)

@Value 관련 환경변수 주입 테스트코드 질문..

작성

·

14

0

@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: true

yml은 전체는 아니지만 이렇게 구성되어 있습니다.

image.png
  • 환경 변수주입은 ChallengeApplication에 다 넣어놨는데, 이게 테스트코드를 돌릴시에는 ChallengeApplication가 도는게 아니라 Junit 하위에 있는게 돌아서 환경변수 주입이 안된게 돌아서 실행이 안되더라구요 .. 보통 어떤식으로 하시나요 ? ㅠㅠ

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

bamho님, 테스트 실행 시 환경 변수가 주입되지 않아 발생하는 문제를 해결하려면 다음과 같은 방법을 시도해 볼 수 있습니다:

  1. 테스트 환경 속성 명시: 테스트 코드에서 사용할 환경 변수를 명시적으로 설정할 수 있습니다. @SpringBootTest에서 properties 속성을 사용하여 환경 변수를 설정할 수 있습니다.
   @SpringBootTest(properties = {
       "social.kakao.apikey=test-apikey",
       "social.kakao.redirect_uri=http://localhost/test-redirect"
   })
   class CategoryServiceTest {
       // 테스트 코드 내용
   }
  1. 테스트 속성 파일 사용: 테스트에 필요한 속성을 src/test/resourcesapplication-test.yml 또는 application-test.properties 파일에 정의하고, 이를 활성화하는 방법입니다. 설정 파일에서 필요한 값을 직접 정의해 두면 좋습니다.

  2. Mock 사용: @MockBean을 사용하여 KakaoApiService를 목(Mock)으로 교체하여 환경 변수에 대한 의존성을 제거하는 방법도 있습니다.

위의 방법 중 적합한 방법을 사용해 보시기 바랍니다. 추가적으로 질문이 있으시면 언제든지 문의주세요! 🙏

Test configuration options are visible in an IDE for managing environment settings in tests.

정보 이해에 도움이 되길 바랍니다.

bamho님의 프로필 이미지
bamho

작성한 질문수

질문하기