일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 컴퓨터보안
- node
- 컴퓨터 보안
- DB
- rest docs
- 보안
- 되추적
- 백트래킹
- access control
- 탐욕기법
- node.js
- 운영체제
- ES6
- 백준
- IT
- AWS
- API문서
- 데이터베이스
- OS
- 병행제어
- 디비
- 스프링부트
- NEST
- S3
- 자바스크립트
- 노드
- 알고리즘
- DATABASE
- 컴퓨터
- 인터럽트
- Today
- Total
개발스토리
java.lang.illegalargumentexception at least one jpa metamodel must be present 본문
java.lang.illegalargumentexception at least one jpa metamodel must be present
무루뭉 2021. 9. 9. 14:06JPA를 사용하고 테스트 코드 작성하는 것을 연습하고 있는데 이런 에러가 떴다..!
에러 로그를 살펴보면 적어도 하나의 jpa metamodel이 필요한 데 없어서 그런것 같다.
이게 무슨 뜻인지 천천히 생각해봤다.
우선 JPA에서는 엔티티들의 생성 및 수정 시간을 자동으로 관리해주는 Auditing 기능이 있다. 나도 이기능을 사용하기 위해 아래와 같은 코드를 작성해둔 상태였다.
이렇게 @EnableJpaAuditing 어노테이션을 테스트들의 가장 기본이 되는 Application 클래스에 등록을 해두면 모든 테스트들이 항상 JPA 관련 Bean들을 필요로 하는 상태가 된다.
즉, @EnableJpaAuditing을 사용하기 위해서는 최소 하나의 @Entity 클래스가 필요하다는 뜻이다.
하지만, 테스트 코드에서는 엔티티를 따로 생성하지 않았기 때문에 발생한 에러였다.
그럼 본 코드에서는 Auditing을 사용하고 테스트 코드에서는 이 설정을 제거하려면 어떻게 하면 될까?
생각하면 간단했다. 나는 테스트 코드에서 @WebMvcTest를 하고 있었고, 이것이 @SpringbootApplication을 스캔하는 데 @EnableJpaAuditing이 함께 있다 보니 같이 스캔되기 때문에 발생하는 것이니 둘을 분리하면 된다고 생각했다.
@WebMvcTest는 일반적인 @Configuration은 스캔하지 않기 때문이다.
테스트 코드를 작성하면서 에러들을 많이 만났다.
하지만 이 에러들을 해결하면서 스프링부트가 편리하지만 어떻게 동작하는 지에 대해
( 예를 들어, 무엇을 자동으로 스캔하고 어떠한 어노테이션을 쓰면 무엇을 필수 구현 해야 하는지..? )
더 생각하게 되고 이해하는 과정을 거치는 것 같다.
++++
더 찾아보니까 위에 방법으로 해도 되지만 @MockBean으로 테스트 클래스에 JpaMetaModelMappingContext를 추가 하는 방법도 있다.
위에 예시 코드처럼 말이다.
하지만, 테스트를 추가할 때 마다 저런 설정을 해주는 것은 좋지 않은 방법이다. 그래서 나는 위에서 말한 첫 번째 방법으로 적용했다.
'삽질 기록' 카테고리의 다른 글
단 건 조회 시 데이터가 없다면..?부터 시작된 이야기 (1) | 2021.12.10 |
---|---|
DefaultSerializer requires a Serializable payload but received an object of type [...] (1) | 2021.09.06 |
could not autowired no beans of... (0) | 2021.08.17 |