Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 스위프트
- swiftUI
- ribs
- UITextView
- MVVM
- Xcode
- Human interface guide
- 리펙터링
- Protocol
- SWIFT
- rxswift
- tableView
- 리팩토링
- uitableview
- clean architecture
- 리펙토링
- Refactoring
- Observable
- RxCocoa
- 클린 코드
- HIG
- UICollectionView
- ios
- collectionview
- map
- uiscrollview
- 애니메이션
- combine
- swift documentation
- Clean Code
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - Swift] 3. 유닛 테스트 방법 - RxExpect를 이용한 Rx관련 비동기 테스트 코드 구현 방법 본문
iOS 응용 (swift)
[iOS - Swift] 3. 유닛 테스트 방법 - RxExpect를 이용한 Rx관련 비동기 테스트 코드 구현 방법
jake-kim 2022. 12. 12. 22:541. 유닛 테스트 방법 - Dependency Injection (@Injected) 주입 구조
2. 유닛 테스트 방법 - Quick과 Nimble을 이용한 테스트 코드 구현 방법
3. 유닛 테스트 방법 - RxExpect를 이용한 Rx관련 비동기 테스트 코드 구현 방법 <
번외) 유닛 테스트 방법 - XCTest와 RxSwift만을 이용한 비동기 테스트 구현 방법
RxExpect
- 시간에 따른 특정 값을 테스트 하고 싶은 경우 사용
- input으로 특정 시간과 특정 이벤트를 발생시켰을때 기대되는 값이 존재하는지 보는 것
RxExpect 사용 방법
- RxSwift, RxCocoa, RxTest의 종속성을 가지고 있는 프레임워크
- input, assert 메소드가 있으며 이 메소드를 통해 Observer, Observable 타입을 테스트 가능
ex) viewModel 준비
- plusPublish를 방출하면 cntBehavior에 값이 기록
- 테스트: plusPublish에 값을 방출해보고, cntBehavior에 값이 잘 적용되는지 테스트
public class ViewModel {
public let plusPublish = PublishSubject<Int>()
public let cntBehavior = BehaviorSubject<Int>(value: 0)
init() {
plusPublish
.subscribe(onNext: { [weak self] plus in
guard let ss = self else { return }
let previous = try! ss.cntBehavior.value()
ss.cntBehavior.onNext(previous + plus)
})
.disposed(by: disposeBag)
}
}
- RxExpect 사용하여 테스트
- observable: input으로 observer 타입을 놓고 .next로 시간에 따른 값 방출
- observer: assert로 값을 관찰하여, events 인수에 들어있는 결과값들을 비교
final class RxExpectTests: XCTestCase {
func testSome() {
var sut: ViewModel!
var rxExpect: RxExpect!
sut = ViewModel()
rxExpect = RxExpect()
rxExpect.retain(sut) // 테스트 도중 메모리 해제 방지
rxExpect.input(sut.plusPublish, [
.next(10, 1),
.next(20, 2),
.next(30, 100)
])
rxExpect.assert(sut.cntBehavior) { events in
expect(events.elements).to(equal([0, 1, 3, 103]))
}
}
}
* 참고
https://github.com/devxoul/RxExpect/blob/master/RxExpect.podspec
https://github.com/ReactiveX/RxSwift/blob/main/Documentation/HotAndColdObservables.md
https://medium.com/free-code-camp/testing-in-rxswift-2b6eeaeaf432
https://github.com/ReactiveX/RxSwift/blob/main/Documentation/UnitTests.md
'iOS 응용 (swift)' 카테고리의 다른 글
Comments