iOS Dev/Testing

    iOS 뷰 컨트롤러 간단하게 테스트 코드 연습하기 ( with Unit Test )

    UIKit 환경에서 뷰 컨트롤러는 3가지 방식으로 구성할 수 있습니다. ( Xib, Storyboard, Code Base ) 해당 방식으로 구성된 뷰 컨트롤러를 인스턴스화 하는 방법을 먼저 살펴보겠습니다. 뷰 컨트롤러 인스턴스 가져오기 Xib, Code Base - 별도의 파라미터가 없는 경우 바로 인스턴스화 가능합니다. Storyboard - 먼저 UIStoryboard 인스턴스에 접근하고, 해당 메서드로 생성해야 합니다. 참고 뷰 컨트롤러 view 로드하기 이렇게 가져온 뷰 컨트롤러는 따로 view 를 로드하는 과정을 거쳐야 합니다. XIB 와 Storyboard 기반의 vc 는 loadViewIfNeeded() 를 통해 Outlet 들을 구성하고 연결할 수 있게 됩니다. Code Base 로 구성..

    iOS URLSession Test Double 만들기

    iOS 에서 네트워크를 테스트하는 방법은 크게 두가지가 있습니다. 1. 실제 서버(혹은 테스트 서버) 에 직접 요청하기 2. Stub 을 통해 실제 네트워크에 요청하지 않고 테스트하기 네트워크 요청은 느리고, 실패 가능성이 있으며 불확실성이 높은 요소입니다. 이런 경우에는 일정한 요청을 return 하는 Stub 을 제작하는 2번으로 주로 테스트를 진행하게 됩니다. URLSessionDataTask vs URLSession 어떤 것을 Stubbing 할까? 테스트 코드 학습을 위해 가장 처음 접했던 포스팅은 배달의 민족 기술블로그 조원님의 "iOS Networking and Testing" 입니다. ( Moya 기반의 test code 코드 작성법도 기술되어 있으니, 꼭 읽어보시면 좋습니다. ) 위에서는..

    iOS 에서 Void Observable 테스트 코드 작성하기

    RxSwift 에서 다음 이벤트로 값을 전달할 필요가 없는 경우에는 Void Observable 를 사용합니다. 그리고 테스트 코드를 작성하기 위해서는 RxTest 에 있는 TestScheduler 를 이용하여 가상 시간의 이벤트들을 방출하는 옵저버블을 만들고, XCTAssertEqual 을 통해 events 를 비교하게 됩니다. Bool Observable 은 문제 없이 테스트 가능하지만 여기서 Void Observable 에서 문제점이 발생하게 됩니다. .next 로 들어가는 요소는 Equatable 을 준수해야 하기 때문입니다. RxSwift 저장소에서 해당 문제가 논의되며 PR이 올라왔었지만, 현재는 메인 저장소에 반영되지 않았습니다. 이를 해결하는 방식은 크게 2가지가 있습니다. 1. 별도의 테..