서비스 단위 테스트 작성 방법 #73
sangwonsheep
started this conversation in
Ideas
Replies: 2 comments
-
|
와 감사합니다!!! 😄 😸 |
Beta Was this translation helpful? Give feedback.
0 replies
-
|
감사합니다!! 참조해서 저도 내일까지 테스트 코드 PR올리겠습니다!! 👍 |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
given-when-then 패턴
하나의 테스트 메서드 안에는 given, when, then 절로 나뉩니다.
단위 테스트를 위한 기초 설정
Mockito
when()의 경우 실제 service 코드에서 사용하는 부분만 작성해야 합니다.
delete를 하기 위해서는 db에 데이터가 있어야 하지 않을까? 라는 생각에 save()를 먼저하고자 하였습니다.
Mockito를 이용하면 실제 db에 있는 데이터를 사용하지 않기 때문에 이런 과정이 필요가 없습니다.
그렇기 때문에 실제 service에 없는 코드를 stubbing? 하려고 하니 위와 같은 에러가 발생하였습니다.
해결법은 when() 관련된 코드만 제거해주면 됩니다.
Mock을 이용하여 테스트를 진행하면 실제 db에서 삭제되는 것은 확인이 불가능합니다.

제 생각에는 테스트하고자 하는 메서드가 잘 실행되는지만 확인하는 것 같습니다...
올바른 테스트인지는 아직 모르겠지만 restaurant 관련 coverage는 100%가 나오는 것을 확인했습니다.
Coverage 측정 방법
멤버 entity 생성 시 비밀번호 암호화
혹시 member entity 생성 중에 비밀번호 암호화 exception 떴을 때 쉽게 해결하기 위한 방법 올려둡니다!
CreatedAt null 값 들어가는 경우
Mockito를 이용하는 단위 테스트에서는 위 기능이 작동하지 않기 때문에 null 값이 들어가게 됩니다.
이를 해결하기 위해선 반드시 수동으로 값을 넣어주어야만 합니다.
해결 방법은 아래에 코드와 함께 적도록 하겠습니다.
로직 중에 createdAt을 사용하는 곳이 있다면 테스트 실행하면서 createdAt이 null이라는 에러를 터트릴 것입니다. (NullPointerException)
이를 해결하기 위한 방안이 2가지 있습니다.
리플렉션을 이용해 BaseTimeEntity에 접근해서 createdAt 값을 직접 설정해줍니다.
Mockito의 doAnswer를 이용해서 createdAt 값을 직접 설정할 수 있습니다.
우선은 서비스 테스트만 부탁드려요!
컨트롤러 테스트는 다른 글로 작성했습니다!
Beta Was this translation helpful? Give feedback.
All reactions