[junit] junit 테스트 때 주의사항(나만 그런가요?)

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가 없다는 에러를 뱉을 것입니다.