Skip to content

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이 블로킹을 만들거나 잘못된 응답을 준다면 모든 네트워크 요청에 영향을 줄 수 있다.

📍 결과 & 배운 점

👉 URLProtocol로 쉽게 iOS 네트워크 테스팅하기