피드로 돌아가기
강남언니 공식 블로그Mobile
원문 읽기
힐페TV - ViewModel을 무조건 믿을 수 있는 방법이 있다?
RxSwift 기반 MVVM 프로젝트에서 TestScheduler와 RxTest를 이용해 ViewModel의 비즈니스 로직을 스트림 단위로 검증
AI 요약
Context
프로젝트 규모가 증가하면서 코드 변경 시 예기치 않은 부작용이 발생했으나, 테스트 코드 없이 런타임에만 의존했다. ViewModel의 비즈니스 로직 변경 시 정상 작동 여부를 보장할 방법이 필요했다.
Technical Solution
- ViewModelType 프로토콜 도입: Input/Output 구조체로 비즈니스 로직을 순수 함수형으로 설계
- RxTest 라이브러리 추가: TestScheduler를 통해 가상 시간에 Observable의 emit을 예약하고 검증
- RxNimble 추가: expect 문법으로 테스트 코드의 가독성을 향상시키고 TestableObserver를 자동 생성
- PublishSubject로 Input 시뮬레이션: 테스트에서 plusAction/subtractAction 등의 사용자 입력을 시간 단위로 주입
- Moya Provider 목업화: 네트워크 요청을 확장함수를 통해 고정된 응답으로 대체하여 HTTP 통신 테스트 구현
Key Takeaway
RxSwift 기반 MVVM 아키텍처에서는 스트림의 시간 의존성을 가상 시간으로 추상화하는 TestScheduler를 활용하면, 복잡한 비동기 로직을 결정론적으로 테스트할 수 있다. 테스트 코드 작성이 초기에는 학습 비용이 크지만, 유지보수 단계에서 예상치 못한 회귀 버그를 조기에 발견하는 가치가 있다.
실천 포인트
RxSwift를 사용하는 iOS 개발 팀에서 MVVM 패턴으로 ViewModel을 구현할 때, TestScheduler와 RxTest로 Observable 스트림을 시간 단위로 검증하면 비동기 비즈니스 로직의 정확성을 자동화된 방식으로 보장할 수 있다. 특히 Moya를 사용하는 경우 네트워크 응답을 고정 값으로 목업하여 네트워크 의존성 없이 ViewModel 로직을 독립적으로 테스트할 수 있다.