티스토리 뷰
Spring Data JPA에서 Id의 @GeneratedValue 이슈
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
- 위의 코드로 익숙한 Entity에서 Id 부분, 우리는
GenerationType.AUTO
가 DB 벤더에 알맞은 전략을 선택해주기 때문에 DB 종속성이 약해져GenerationType.Identity
(MySQL의 auto increment 역할)보다 적절하다고 알고있었다. - 그러다 리팩토링을 진행하며,
GenerationType.Identity
일땐 잘 작동하던게GenerationType.AUTO
로 바꾸니 에러가 나기 시작했다. - 검색해보니 오늘도 jojoldu님에게 도움을 받을수있었다. https://jojoldu.tistory.com/295
- 링크에 정리 잘 되어있어 읽으면 되지만, 간략히 요약해보면 다음과 같다.
- (rough한 요약) Hibernate 예전 버전은 알던대로
AUTO
가Identity
였다. 하지만 Hibernate 버전이 올라가며 특정 버전부터AUTO
가Table
로 바뀌었다. (MySQL의 경우) - 이에 대한 해결책은 2가지를 제시해주셨다. 단순히
Identity
로 바꾸거나, application.properties 또는 yml 파일에 해당 Hibernate 옵션 설정을 끄는 방법. - 우린 첫 문단에 언급한대로
Identity
는 피하고싶어서 후자의 방법을 택해, 설정파일을 수정해 해당 이슈를 해결했다. - https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-1.4-Release-Notes#generator-mappings
Mockito를 사용하기 위한 @ExtendWith 추가
- 서비스 테스트에
Mockito
를 사용하는 과정에서,Mockito
는 기본 스프링 부트 test 의존성에 들어있어서 바로 사용할 수 있었다. testImplementation 'org.springframework.boot:spring-boot-starter-test'
- 테스트를 짜고 돌리니 이번에도 터지기 시작했다. 찾아보니 Spring의 빈들과 Mockito는 서로 모른다, 이들을 통합시켜주기위해
@ExtendWith(SpringExtension.class)
를 테스트 클래스에 추가해줘야했다. @ExtendWith(SpringExtension.class)
도 되고,@ExtendWith(MockitoExtension.class)
도 된다.- 이 과정에서 추가로
@RunWith
와@ExtendWith
의 차이도 덤으로 알게되었다. JUnit 버전 차이였다. - https://stackoverflow.com/questions/55276555/when-to-use-runwith-and-when-extendwith
Mockito를 활용한 서비스 레이어 테스트
- 오랜만에 서비스 테스트를 짜며 Mockito를 활용했다. 기억이 하나씩 되살아났다.
- 우리 프로젝트에선 서비스 메소드의 로직이 여전히 너무나 간단해서, 서비스 테스트의 의미가 크진 않은것 같다. 동시에 모킹하며 테스트하는게 '짜고치는 고스톱'이라는 느낌을 여전히 벗을수없었다.
- 하지만 나중에 서비스 로직이 복잡해지면 이는 해결될거라 생각.
- 이 과정에서 하나 오해했던걸 풀수있었다.
given
은BDDMockito
꺼,when
은Mockito
꺼다. 별개다. given-when-then이 given()-when()-verify()로 매칭되는거란건 착각이엇다. 각각 상황에 맞게 사용하자. 재밌는 메소드들도 많이 발견했다.
'Daily.log' 카테고리의 다른 글
21.04.15) 오늘의 기록 - 날뛰는 팬소음과 Google Chrome Helper (0) | 2021.04.15 |
---|---|
2020) 2019년 회고 + 2020년 계획 (0) | 2020.01.08 |
19.12.10) 오늘 하루동안 고민한 것들 (ATDD, Spring Boot Test 및 Test 객체 등) (0) | 2019.12.10 |
19.11.03) 블로그 작업 : Readings 카테고리 정리 (0) | 2019.11.03 |
19.10.9) 오늘의 삽질 : 크롬 시크릿창 캐시 비우기 (0) | 2019.10.09 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- Data Structure
- sort
- FRAGMENT
- Android
- Android Studio
- OneToMany
- bfs
- javascript
- dfs
- 회고
- Algorithm
- socket
- 우아한 테크코스
- queue
- C
- Stack
- 웹해킹
- JPA
- reversing
- Vo
- graph
- 개발자
- 프로그래머스
- 해외여행
- webhacking.kr
- Java
- mysql
- git
- brute-force
- 리버싱
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함