작성
·
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은 전체는 아니지만 이렇게 구성되어 있습니다.
환경 변수주입은 ChallengeApplication에 다 넣어놨는데, 이게 테스트코드를 돌릴시에는 ChallengeApplication가 도는게 아니라 Junit 하위에 있는게 돌아서 환경변수 주입이 안된게 돌아서 실행이 안되더라구요 .. 보통 어떤식으로 하시나요 ? ㅠㅠ
답변 1
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)으로 교체하여 환경 변수에 대한 의존성을 제거하는 방법도 있습니다.
위의 방법 중 적합한 방법을 사용해 보시기 바랍니다. 추가적으로 질문이 있으시면 언제든지 문의주세요! 🙏
정보 이해에 도움이 되길 바랍니다.