์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 | 31 |
- BFS
- TCA
- ios
- node.js
- XCTest
- designpattern
- arkit
- realm
- tableView
- Kuring
- swift
- SnapKit
- ํ๋ก๊ทธ๋๋จธ์ค
- rxcocoa
- UIKit
- Xcode
- combine
- Swfit
- ํจ์คํธ์บ ํผ์ค
- Lv2
- reactorkit
- Flutter
- RxSwift
- CollectionView
- visionOS
- MVVM
- ๋ฐฑ์ค
- raywenderlich
- BOJ
- SwiftUI
- Today
- Total
lgvv98
[XCTest] RxTest ์ RxBlocking์ ๋ํด์ ์์๋ณด์ ๋ณธ๋ฌธ
[XCTest] RxTest ์ RxBlocking์ ๋ํด์ ์์๋ณด์
๐ฅ ์บ๋ฟ๋งจ 2022. 2. 20. 15:31RxTest / RxBlocking
โ ํ ์คํธ์ ๋ํด์ ์์๋ณด์.
Rx... ์๋ด ๋๋์ฒด ์ด๋ป๊ฒ ํ ์คํธํ ๊น ๊ณ ๋ฏผ ๋ง์ด ํ์๋๋ฐ, ์ด๋ฐ ๋๊ตฌ๋ค์ด ์๋ค๋!
์ฌ๋ด์ด์ง๋ง ์ด๋ฐ๊ฑฐ Kuringํ๋ก์ ํธ ํ์๋ ๋ถ์ ํ ์คํธ์ฝ๋ ๋ณด๋๋ฐ ์ฝ๊ฐ ์น์;;
Swift์์ ์ ๊ณตํ๋ ๊ฒ๋ง์ผ๋ก๋ ์ถฉ๋ถํ๋ค๊ณ ์๊ฐํ๋๋ฐ ๊ตณ์ด Rx๋ฅผ ํ๋๊ฒ ๋์์ด ํด๊น?? ์๊ฐ๋ ๋ค์ง๋ง ์๋ฌดํผ ๊ณต๋ถํด๋ณด์
(UIButton์ rx.tap ๋ชป์ด๋ค๊ณ ์๊ฐํ๋ ๊ณต๋ถํด์ผ๊ฒ ใท.ใ )
๐ RxTest๋?
Observable์ ๊ฐ์์ ์๊ฐ ๊ฐ๋ ์ ์ฃผ์ ํด์ ํ ์คํธํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ์์ ์๊ฐ์ด ๋ค ํ๋ฅผ๋๊น์ง ๊ธฐ๋ค๋ฆฐ ํ์ ์ด๋ฒคํธ๋ฅผ ๋ฐํํ ์ ์์ด.
๊ฐ ์ด์ ๋ฌธ์ํ๋ ๋ฐฉ์ถํ๋ค๊ณ ๊ฐ์
1์ด -> "A"
2์ด -> "B"
3์ด -> "C"
// 2sec์ B๊ฐ ๋์๋์ง ๊ฒ์ฆ
โ RxTest
// ๊ฐ์์ ์๊ฐ ํ๋ฆ ์์ฑ
let scheduler = TestScheduler(initialClock: 0)
// ์ํ๋ ์์ ์ Event๊ฐ ๋ฐ์ํ๋ Observable ์์ฑ(๊ตฌ๋
์ฌ๋ถ์ ๊ด๊ณ์์ด ์ด๋ฒคํธ ๋ฐ์)
let obsevable = scheduler.createHotObservable([
.next(1, "A"),
.next(2, "B"),
.next(3, "C")
])
// ์ํ๋ ์์ ์ Event๊ฐ ๋ฐ์ํ๋ Observable ์์ฑ(๊ตฌ๋
์ด ์์๋์ด์ผ ์ ํด์ง ์์๋๋ก ์ด๋ฒคํธ ๋ฐ์)
let obsevable = scheduler.createColdObservable([
.next(1, "A"),
.next(2, "B"),
.next(3, "C")
])
// String์ ๊ด์ฐฐํ๋ Observer ์์ฑ
let observer = scheduler.createObserver(String.self)
// ๊ด์ฐฐ์๋ฅผ ํตํด์ ํ
์คํธํ๊ณ ์ ํ๋ ์ต์ ๋ฒ๋ธ ๊ตฌ๋
obsevable
.subscribe(observer)
.disposed(by: bag)
// ๊ด์ฐฐ์์
scheduler.start()
// Nimble ๋ฌธ๋ฒ์ ํ์ฉํ Test Assertion
expect(observer.events).to(
equal([
.next(1, "A"),
.next(2, "B"),
.next(3, "C")]
)
์์๋ณด๋ฉด Hot์ด๋ Cold ๋์ค๋๋ฐ, Rx์ฒ์ ๊ณต๋ถํ ๋ ๋ฌด์ง ์ด๋ ต๋๊ฑฐ ์ด์ ๋ค ์ดํด๊ฐ๋ฅ ใ ~!
๐ RxBlocking์ด๋?
Observable์ ์ด๋ฒคํธ ๋ฐฉ์ถํ๊ณ ํน์ ์๊ฐ๋์ ๋ฐฉ์ถ๋ Observable์ ์ด๋ฒคํธ๋ฅผ ๊ฒ์ฆ
RxTest์ ์์๋ ์ค์ผ์ค๋ฌ๋ ๊ฐ๋ ์ ์์
๊ฐ ์ด์ ๋ฌธ์ํ๋ ๋ฐฉ์ถํ๋ค๊ณ ๊ฐ์
1์ด -> "A"
2์ด -> "B"
3์ด -> "C"
// ["A","B","C"]
โ RxBlocking
// Observable -> BlockingObservable
let obsevable = Observable.of("A","B","C").toBlocking()
// Observable์ .next ์ด๋ฒคํธ๋ฅผ Array๋ก ์ ํ
let values = try! observable.toArray() // ์ด๋ ์ด ์ ํ์ด ์ปดํ๋ฆฟ ๋ ๋๊น์ง ๋๊ธฐ
// Nimble์ ๋ฌธ๋ฒ ํ์ฉํ Test Assertion
expect(values).to(equal(["A","B","C"]))
๋ง์ฝ ์ปดํ๋ฆฟ์ด ๋์ง ์์๋ ์ํํ๋ ค๋ฉด .toBlocking(timeout: 2) ์ด๋ฐ์์ผ๋ก ์ธ์๊ฐ์ ์ฃผ๋ฉด ๋๋ค.
๋จ์ํ ๋ฐฉ์ถ๋๋ ๊ฐ๋ง ํ์ํ๋ค๋ฉด ๋ธ๋กํน์ผ๋ก๋ ์ถฉ๋ถํ๊ณ
์ค์ผ์ค๋ฌ์ ๊ฐ๋ ์ด ๋ค์ด๊ฐ์ผํ๋ค๋ฉด test๋ฅผ ์ฌ์ฉํ๋๊ฒ ์ข๋ค.
'apple > ๐ฝ XCTest' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[XCode] Instruments (0) | 2022.07.12 |
---|---|
[XCTest] XCTest์ ๋ํด์ ์์๋ณด๊ธฐ 1ํธ (0) | 2022.07.03 |
[XCTest] Stubber์ ๋ํด์ ์์๋ณด์ ๐ (0) | 2022.02.20 |
[XCTest] Quick ๊ณผ Nimble์ ๋ํด์ ์์๋ณด์. (0) | 2022.02.20 |
[XCTest] ๐ง๐ปโ๐ป Xcode ๊ธฐ์กด ํ๋ก์ ํธ์ XCTest ์์ฑ ํ์ผ ์ถ๊ฐํ๊ธฐ! (0) | 2022.02.15 |