forked from codesquad-members-2022/issue-tracker
-
Notifications
You must be signed in to change notification settings - Fork 1
5. 네트워크 요청 테스트 방법
bumgeun edited this page Jun 30, 2022
·
2 revisions
📍 했던 의사결정
- URLsession을 Mocking하지 않고, URLProtocol을 사용해 네트워크 테스팅하기
📍 결정을 한 이유
-
직접 URLSession을가짜로 만들어서 주입해주는 방법도 있지만, 많은 중복코드를 만들게 된다. 매번 API마다 거기에 맞는 URLSession을 만들어줘야하기 때문이다.
-
혹은 테스트를 위한 가짜 벡엔드 서버를 만들 수도 있겠지만, 항상 반복가능한 결과를 도출하게 만드는 게 굉장히 어렵다. 네트워크 환경에 어쩔 수 없이 영향을 받기 때문이다.
-
URLProtocol
-
커스텀 URLProtocol을 사용하면, 네트워크 요청에 원하는 데이터를 return할 수 있도록 쉽게 만들 수 있다.
-
Apple에 URL Loading System에는, URL Request를 인터셉트해서, 응답을 직접 return할 수 있는 기능이 있다.
-
사실 이 기능은, HTTP가 아닌 custom Protocol을 위한 기능이다. 우리가 쓰는 대부분의 네트워크 프로토콜을 HTTP지만, 그게 아니라면 그걸 처리하기 위한 커스텀 핸들러를 넣을 수 있도록 하는 것이다.
-
이 클래스는 생성해서 쓰는 것이 아니라, 서브클래싱을 해서 쓰면 된다.
-
네트워크 테스트를 할 때, URLSession을 Mocking하지 않아도 된다. URLProtocol을 쓰면 되기 때문이다.
-
URL Loading 시스템은 URLProtocol의 모든 서브 클래스에 대해 차례대로 요청을 한다는 것을 유의하자. 만약 특정 URLProtocol이 블로킹을 만들거나 잘못된 응답을 준다면 모든 네트워크 요청에 영향을 줄 수 있다.
📍 결과 & 배운 점