Mock 객체 어디까지 사용해야 할까? (feat. Top-Down TDD) #67
jaejae-yoo
started this conversation in
토론
Replies: 1 comment
-
일단 Mock으로 풀어가다가 Mock으로 사용하던 객체가 구현이 완료되면 바꾸는 방식이 좋아보입니다. |
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
-
OAuth를 사용한 로그인 기능은 외부 API와 연동되는 기능이기 때문에 테스트하기 까다로웠는데요.
해당 문제를 적절히 모킹 객체를 사용하면서, 잘 해결해 나아갈 수 있었던 것 같습니다.
Mock 객체를 사용하는 기준이 있는지 궁금해서 discussion 올립니다! 🤓
예시 코드를 보며 정리해 보겠습니다.
지금은 사라진 코드이지만, 로그인 서비스 테스트에 작성했던 코드입니다.
위 코드에서 확인하실 수 있듯이, Service는 프로덕션 객체를 사용하고 나머지는 Mock를 사용한 코드입니다.
추가적으로 상황을 덧 붙이지만 현재 서비스에서는
라는 과정이 한 flow로 진행되고 있습니다.
Mock 객체로 테스트를 작성하면서, 생각한 장점을 정리해 보았습니다.
1) 흐름도 역할을 한다.
위에서 작성한 테스트를 통해 로그인 기능의 flow를 한번에 확인할 수 있었는데요.
mock을 사용하니, 각 동작에서 필요한 요청과 응답을 정리하며 전체 flow를 정리할 수 있었습니다.
해당 테스트를 작성하고 개발을 진행하니 방향을 잃었을 때, 참고하기 매우 좋았습니다.
2) 현재의 추상적인 문제를 구체화될 때까지 미룰 수 있다.
원래 구현을 진행할 때 계획했던 방향은, Mock 객체로 테스트를 작성하여 개발을 진행하고,Service가 완성되면 프로덕션 객체로 바꾸자였습니다.
하지만 당시에 고려하지 못했던 점은, 해당 기능은 외부 API와 강하게 결합되어 있다는 것입니다.
따라서 저희가 제어할 수 없는 부분이 많았기 때문에, 애초에 프로덕션 객체로 테스트하는 것이 불가능했습니다. (jwt token이 어떤 것일지 알 수도 없고, github에서 어떤 값을 응답해줄지도 알 수 없습니다.)
Mock으로 테스트를 진행하니 해당 문제를 어느 정도 개발을 진행한 다음에야 직면할 수 있었는데요. 따라서 해당 기능이 필요한 시점에, 문제를 직면할 수 있었습니다.
만약 모킹을 사용하지 않았다면, 우선적으로 기능이 아닐 수 있음에도 불구하고, 구체화되지 않은 문제로 인해 개발이 딜레이 됐을 것이라 생각합니다.
따라서 모든 기능을 구현한 후에, 최대한 실제 동작과 가깝게 테스트하도록 MockMVC와 MocRestServiceServer를 사용해서 테스트하도록 바뀌었습니다.
3) 작은 단위에 집중할 수 있다. TDD를 더 잘할 수 있다.
mock 객체를 사용하니, 현재 해결해야 할 기능만 구현해 나갈 수 있었습니다.
저의 경험으로 미루어 볼 때, Top-Down 방식에서 mock을 사용하지 않으면, TDD를 잘 지키기 어려웠던 것 같습니다.
단점은 역시 실제 동작에서 잘 동작하지 않을 수 있다는 점인 것 같습니다.
Mocking을 많이 사용할 수록, 실제로 잘 동작할지 걱정되는 것은 어쩔 수 없네요.. 🥲
따라서 적절하게 사용하는 것이 매우 중요하다고 생각합니다.
혹시 Mock 객체 사용에 대한 생각이 있다면, 공유부탁드려요 ~ 🙌
글 전문
Beta Was this translation helpful? Give feedback.
All reactions