[Spring] 테스트코드 작성 시 Mock 데이터에 ID 부여하기 (FieldTypesDoNotMatchException: 'id' is String but the actual type is Null 에러 해결)

leeng·2024년 7월 23일
0
post-thumbnail

에러 로그를 DB에 저장하는 기능을 개발하면서 테스트 코드를 작성할 일이 생겼다. 일단 Service를 MockBean으로 등록하고 리턴 타입과 같은 Mock 데이터를 리턴해주는 구문을 작성해주었다.

그런데 코드를 실행해보니 아래와 같은 에러가 발생했다.

에러로그 엔티티의 경우 로그 데이터 객체를 생성자로 받아서 생성되고, 생성된 엔티티가 save되는 시점에 id가 자동으로 생성되도록 되어있었다.
그래서 내가 가짜로(?) 생성한 엔티티에는 id가 아직 존재하지 않고 컨트롤러 테스트의 결과에는 id도 존재해야 하므로 에러가 나는 것은 당연했다.

그런데 문제는... 어떻게 id를 넣어주느냐 하는 것이었다.

로그 데이터 객체는 다른 곳에서도 사용되기 때문에 일관성을 위해 엔티티에서는 로그 데이터를 그대로 받아서 엔티티를 생성하는 방법만을 가져가고 싶었다.
테스트 코드 때문에 억지로 id를 파라미터로 받는 생성자를 만들고 싶지는 않았다. 마찬가지로 builder를 만들거나 setter를 추가하고 싶지도 않았다.

테스트 코드 때문에 구조를 바꾸기는 싫어서 열심히 구글링을 하다가 아래와 같이 ReflectionTestUtils를 사용하는 방법을 찾아냈고 결과적으로 잘 동작했다!

profile
기술블로그보다는 기록블로그

0개의 댓글