본문 바로가기

iOS

iOS Test Case 개발 방법 With ReactorKit

안녕하세요.

iOS Test Case 를 작성하는 방법에 대해서 가볍게 알아보도록 하겠습니다.


주의하세요! 자세한 코드의 설명은 누락되어 있습니다.


전체 소스는 아래 링크를 통해서 확인하실 수 있습니다.

Sources


사용되는 언어, Library

- Swift 4.2

- RxSwift

- ReactorKit

- RxDataSources

- SnapKit



이번에 다뤄볼 예제는 총 4가지입니다. 


1. UnitTest

2. ReactorKit Test

3. UIView Test

4. XCUIApplication



Application 소개

설명하기 전 어플리케이션의 동작부터 간단히 확인해 보도록 하겠습니다. 

1. 타이틀이 보여지는 List 가 있으며 3개의 아이템이 존재합니다. 
2. "aaa" 를 클릭하면 다음화면으로 ViewController 가 실행되고 클릭한 문자열를 화면에 보여줍니다. 




1. Unit Test

UnitTest를 사용하는 이유는 작은 단위로 검증하기 위해서 입니다. 



현재 예제에는 SampleRepository 의 기능을 검증하기 위한 목적으로만 소개합니다. 



SampleRepository.search("a") 함수를 호출하면 startWith("a") 의 값을 반환하도록 하는 예제입니다.


let fixture = [

        Sample(title: "aaa"),

        Sample(title: "abb"),

        Sample(title: "acc"),

        Sample(title: "bcc")

    ]

    

    let expect: [Sample] = [

        Sample(title: "aaa"),

        Sample(title: "abb"),

        Sample(title: "acc")

    ]


TestCase

"a"로 시작하는 title 을 검증합니다. 


SampleRepositoryTest.swift

 



2. ReactorKit Test

ReactorKit 에 대한 이해가 필요하신 분들은 훌륭한 문서를 여기에서 확인하실 수 있습니다.


ReactorKit을 Test 하기 위해 RxExpect 라는 Library가 존재합니다. 



TestCase

첫번째 State가  var items: [MySection]  == [] 임을 검증합니다. 

두번째 State가 .search("a") Action이 실행되면 "a" 로 시작하는 Title을 가지는 items를 검증합니다. 


SampleListReactorTest.swift 



Reference 

RxExpectTest.swift





3. UIView Test

Quick UIViewController의 라이프 사이클 이벤트 트리거 에서 UIViewController의 Lifecycle을 제어하는 방법을 소개하고 있습니다. 

TestCase

첫번째 TableView에 "aaa" 의 Text 를 가지는 Cell이 있는지 검증합니다.



SampleListViewControllerTest.swift 



4. XCUIApplication



tableView.accessibilityIdentifier = "access_tableview"


accessibilityIdentifier 를 지정하여 XCUIApplication으로 부터 접근하는 방법을 소개하는 합니다.


여기에서 내용을 확인하실 수 있습니다.



TestCase

첫번째 access_tableview 인 accessibilityIdentifier를 접근합니다.

두번째 Cell의 Text 중 "aaa" 로 표시되는 Cell을 클릭합니다.

세번째 다음 화면으로 넘어가면서 "aaa" Text 를 검증합니다.



XCUIApplication.swift









Android Test Code 는 아래 글에서 확인하실 수 있습니다.




소중한 시간내어 주셔서 감사합니다.