Mocking을 이용해 단위테스트를 어느정도 구현했지만 여전히 서비스 로직 자체가 외부 API에 의존하는 서비스다 보니 완전한 단위테스트라 할 수 없을것 같다
이번에는 각 컴포넌트의 완전한 단위테스트를 구현하고 최종적으로는 직접 브라우져에서 토큰을 받아와 호출하는 방식 대신 테스트 코드에서 직접 토큰도 받아오는 형식으로 구현해보겠다.
userService의 기능은 다음과 같다.
User 객체의 조회 및 생성
User 객체의 프로필 수정
StravaService.getRide 호출
ride 오브젝트 추가
UserRepository.save() 호출
UserServiceTest.duplicatedUserNoUpdateTest()
UserServiceTest.duplicatedUserUpdateTest()
우선 기본적인 userService의 기능을 검증하는 테스트 코드를 작성했다.
첫번째 duplicatedUserNoUpdateTest의 경우 userRepository에서 user 오브젝트를 하나 리턴하도록 해서 이미 존재하는 user인 상황을 만들었다.
그리고 해당 user는 새로운 ride를 가지고 있지 않아 업데이트 할 것이 없으며 프로필만 수정된 상황으로 하고 프로필이 수정된 user오브젝트를 userRepository에 저장하는지 검증했다.
두번째 duplicatedUserUpdateTest는 이미 존재하는 user이면서 새로운 ride를 하나 가지고 있는 것으로 상황을 설정하기 위해 client.getRideOne() 으로 더미 Ride 데이터를 하나 리턴하도록 했다.
그리고 stravaService를 정상적으로 호출해 ride 오브젝트들을 가져와서 addRide로 담은다음 repository에 저장하는지 검증했다.