[테스트코드] @DataJpaTest 사용시

Welcome to Seoyun Dev Log·2022년 8월 25일

테스트코드

목록 보기
3/7

01.@DataJpaTest 사용시 주의할 점

스프링에서 DataJpaTest사용시 만났던 에러로

no entity!!!!! 분명 애플리케이션 환경에서는 잘 돌아가는데, test 코드에서는 왜 찾지 못하는것인가
아직 부족한 부분이 많다보니 내가 모르는 엔티티 적용 방법이 있는건지 계속 고민했다 ㅠㅠ
그때 블로그 참고 해서 다행이 해결했는데

1) Repository 클래스를 못 찾을 때

@EnableJpaRepositories 어노테이션을 써서 repository의 위지를 명시적으로 지정해준다.
혹은
@ActiveProfiles("test") 환경을 지정해준다.

  • 발생한 에러
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'a.b.c.MyRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
  • 해결 방법
@DataJpaTest
@EnableJpaRepositories("someThing")
public class WinnerRepository{

2) 엔티티를 찾지 못할 때

해당 클래스를 가서 context 주입이 되어있는지 확인한다. 어노테이션을 적용해줬다면 해당 엔티티 클래스를 찾지 못해서 발생한 에러이다.
이럴때는 @EntityScan 어노테이션을 써서 명시적으로 엔티티 클래스 위치를 지정해준다
@EntityScan("a.b.c")

  • 발생한 에러
Caused by: java.lang.IllegalArgumentException: Not a managed type: class a.b.c.My

3) test Embedded DB를 사용해서 값을 가지고 올 수 없을 때

@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) 해당 어노테이션으로 강제 대체를 막으면 application.properties yml에 설정된 DB로 연결할 수 있다.

  • 발생한 에러
javax.persistence.NoResultException: No entity found for query
  • test 실행시
    : in-memory DB로 실행됐다는 것
 [           main] o.s.j.d.e.EmbeddedDatabaseFactory        : Starting embedded database: url='jdbc:h2:mem:09aea81c-0755-4351-b31e-7f60171664e4;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=false', username='sa'
profile
하루 일지 보단 행동 고찰 과정에 대한 개발 블로그

0개의 댓글