피드로 돌아가기
뱅크샐러드 iOS팀이 숨쉬듯이 테스트코드 짜는 방식 3편 - 스펙별 단위 테스트
뱅크샐러드 기술블로그뱅크샐러드 기술블로그
Mobile

뱅크샐러드 iOS팀이 숨쉬듯이 테스트코드 짜는 방식 3편 - 스펙별 단위 테스트

뱅크샐러드가 BaseTestCase, RxTestCase, EventLoggingTestCase, PresentationTestCase 4개 기본 테스트케이스 클래스를 제공해 iOS 단위 테스트 코드를 3줄 이내로 작성 가능하게 표준화

2022년 5월 30일10intermediate

Context

ios 개발자들은 테스트 코드 작성을 어렵고 개발 속도를 저하시키는 업무로 인식했으며, 특히 RxSwift 기반 비동기 로직과 이벤트 로깅, 화면 전환 로직 테스트 시 매번 보일러플레이트 코드를 작성해야 했다.

Technical Solution

  • BaseTestCase 도입: 모든 테스트를 given-when-then 구조로 통일해 테스트 코드 작성 패턴 표준화
  • RxTestCase 상속 구현: TestScheduler, DisposeBag 초기화 로직을 내부화하고 when(observing:) 메서드로 Observable 입출력을 명확히 정의해 Rx 테스트 보일러플레이트 제거
  • EventLoggingTestCase 별도 제작: EventLogger.eventObserver를 테스트 출력 대상으로 고정해 로깅 검증 테스트 통일 및 팀 차원 중요성 강조
  • PresentableLogicTestCase(PushableLogicTestCase 포함) 구현: 화면 전환 로직을 String 기반 debugDescription으로 표현해 navigation 스펙을 단순하게 검증 가능하게 구성
  • 각 TestCase별 구체적 예제 코드 제공: 프로젝트 내 검색 시 관련 패턴을 빠르게 학습 가능하도록 샘플 테스트 케이스 작성

Key Takeaway

테스트 코드 작성이 자동화되려면 실천이 쉬워야 하므로, 프로젝트별로 테스트하기 쉬운 영역(이벤트 로깅, 네비게이션)부터 TDD를 의무화하고 이를 통해 점진적으로 테스트 영역을 확대하는 방식이 유효하다.


RxSwift를 사용하는 iOS 프로젝트에서 BaseTestCase → RxTestCase 상속 구조를 도입하고 TestScheduler/DisposeBag 초기화를 추상화하면, 개별 비동기 로직 테스트를 3줄 이내(given-when-then)로 작성할 수 있어 개발자의 테스트 작성 진입장벽을 낮출 수 있다.

원문 읽기