2021. 9. 3. 00:33ㆍ개발공부/테스트 주도 개발
junit 테스트 때 주의사항(나만 그런가요?)
회사에서 websocket 방식으로 redis에 데이터를 업데이트 해주는 서버와 본 서비스 서버 두 가지를 맡아
개발하다보니 트랜잭션을 지원하지 않는 redis repository와 RDBMS MariaDB 간의 테스트 방식에 따른
혼란(aka 삽질)이 발생했습니다. (경험치 +30, 시간 -30) 나쁘지 않은 것일수도...
사담은 이만하고 RDBMS + @DataJpaTest + Springboot + build 환경별 profile이 다른 프로젝트에서 junit 단위 테스트할 때 주의사항에 대해 알아보겠습니다.
1) @ActiveProfile
production, stage, local 등 build 환경설정이 다를 경우 application.yaml
혹은 application.properties
를 통해 profile을 각각의 환경으로 관리할 수 있습니다. junit 테스트 시에도 @ActiveProfile(value = [active_profile])을 지정해줘야 원하는 환경으로 테스트를 실행할 수 있습니다.
2) @AutoConfigureTestDatabase(replace = Replace.NONE)
DataJpaTest 는 여러 어노테이션을 보유하고 있으며, 애플리케이션에 등록된 DB 대신 테스트 Datasource로 in-memory DB를 사용합니다. 여러 어노테이션 중 하나인 @AutoConfiguretestDatabase
를 (replace = Replace.[TYPE])
으로 override해서 테스트할 DB를 직접 설정해줄 수 있습니다. 만일 in-memory 연관 의존성이 주입되있지 않은 환경에서 @AutoConfiguretestDatabase
를 override 하지 않는다면 junit은 driver class
가 없다는 에러를 뱉을 것입니다.
'개발공부 > 테스트 주도 개발' 카테고리의 다른 글
회사 테스트 코드 도입기 (1) | 2023.04.27 |
---|---|
[넥스트스텝] 반복문 내 객체생성은 성능을 저하시킬까? (0) | 2021.09.02 |
[넥스트스텝] TDD 리팩토링 연습과정 (0) | 2021.09.02 |
(6) 1부 화폐예제 - 11,12장 드디어, 더하기 (0) | 2021.04.09 |
(4) 1부 화폐예제 - 7,8장 객체 만들기 (0) | 2021.03.30 |