SlideShare une entreprise Scribd logo
1  sur  89
Télécharger pour lire hors ligne
뱅크샐러드이병찬
RxTest 같이 시작하기
RxTest, RxBlocking을 같이 알아보기!
뱅크샐러드이병찬
RxTest 같이 시작하기
RxTest, RxBlocking을 같이 알아보기!
1. TestCode, ObservableTestCode란?

2. RxBlocking에 대해

3. RxTest에 대해

4. RxSwift를 테스트해보자!
목차
1. TestCode란?
어떤 동작을 수행 했을 때

1) 원하는 값이 나오는지 검증

2) 연속되어야 하는 동작이 수행되는지 검증
TestCode란?
원하는 값이 나오는지
원하는 값이 나오는지
원하는 값이 나오는지
원하는 값이 나오는지
값이 원하는 형태로 나오는지 검증
연속되어야 하는 동작을 수행하는지
연속되어야 하는 동작을 수행하는지
연속되어야 하는 동작을 수행하는지
연속되어야 하는 동작을 수행하는지
연속되어야 하는 동작을 수행하는지
연속되어야 하는 동작의 수행 검증
그럼 Observable은?
RxTest 새내기 "이뱅샐"
Event를 동기적으로 받을 수는 없을까?
subscribe없이 Event를 받을 수는 없을까?
Hot Observable일 때는?
reduce도 못하는데…
기대하는 타이밍에 Event가 나오는지 검증은?
버튼 눌렀을 때 Event가 나오는지 검증해야 하잖아?
/* Event를 간단하게 추출할 수 있어야 함

/* 원하는 값이 원하는 타이밍에 나오는지 검증
RxBlocking RxTest
어서와, 테스트는 처음이지?
2. RxBlocking
🍏 🍇 🌶 🌽 🍉
🍏 🍇 🌶 🌽 🍉
➜
[ 🍏, 🍇, 🌶, 🌽, 🍉 ]
onComplete가
떨어질 때까지 기다린다…
🍏 🍇 🌶 🌽 🍉
➜
[ 🍏, 🍇, 🌶, 🌽, 🍉 ]
onComplete가 꼭 떨어져야 함
.toBlocking(timeout: RxTimeInterval?)
🍏 🍇 🌶 🌽 🍉
[ 🍏, 🍇, 🌶 ]
➜
- ColdObservable의 Event를 검증할 때 사용

- 특정 시간동안 방출된 Observable의 Event도 검증 가능

• HotObservable도 사용 가능
RxBlocking은
3. RxTest
1초 2초 3초 4초 5초
🍏 🍇 🌶 🌽 🍉
➜
[ (🍏, 1초), (🍇, 2초), (🌶, 3초), (🌽, 4초), (🍉, 5초) ]
➜
3초에 🌶가 나왔는가?
let buttonTapped = s.createHotObservable([
.next(1, Void()),
.next(3, Void())
])
구독의 여부와 상관없이
이벤트 발생
구독이 시작되면
정해진 순서대로 이벤트 발생
1초 2초 3초 4초 5초
🍏 🍇 🌶 🌽 🍉
👀 관찰 👀
➜➜
[ (🍏, 1초), (🍇, 2초), (🌶, 3초), (🌽, 4초), (🍉, 5초) ]
👀 가상의 시간이 모두 흐를 때까지 관찰 👀
👀 가상의 시간이 모두 흐를 때까지 관찰 👀
Observable이 끝나지 않아도 상관X
👀 가상의 시간이 모두 흐를 때까지 관찰 👀
Hot Observable도 테스트 가능!
가상의 시간이 모두 흐를때까지..
- Observable에 시간개념을 넣어줌

• 이를 통해 언제 무엇이 나왔는지 검증 가능

- Observer를 통해 Hot, Cold 모두 검증가능

• 가상의 시간이 다 흐를 때까지 관찰 후 타이밍과 Event 반환
RxTest는?
4. RxSwift를 테스트하자
- 원하는 값이 정상적으로 나오는지 검증

- Response에 상관없이 예상하는 결과가 나오는지
"isLoading" TestCase
✨
- tapped 되었을 때 마다 원하는 값이 정상적으로 나오는지 검증

- Response에 상관없이 예상하는 결과가 나오는지
"loading" TestCase
✨
✨
✨
- Mocking, 가상의 시간, Observer.. 언제 배우나?

- TestCode보다 기능 개발이 더 우선 아니야?
RxBlocking, RxTest....
func removeAllData() {
/* 구현 */
Implements()
}
func removeAllData() {
/* 구현 */
Implements()
}
만약 삭제에서 누락된 데이터가 있다면?
당연하게 동작할 것 같은 코드의 배신
➜
Hotfix
TestCode는

당연한 코드가 당연하게 동작하는지 검증
RxSwift의 TestCode는

Observable이 당연하게 방출되는지 검증
“RxSwift & 테스트코드와 함께 금융의 혁신을
만들어갈 전사들을 뱅샐은 기다립니다.”
- RxTest, RxBlocking

• https://www.raywenderlich.com/7408-testing-your-rxswift-code

• https://github.com/ReactiveX/RxSwift/blob/master/Documentation/UnitTests.md

- Nimble

• https://github.com/Quick/Nimble

- Stubber

• https://github.com/devxoul/Stubber
참고자료
slido.com / #P445
RxSwift Testing 같이 시작하기 feat. RxBlocking, RxTest

Contenu connexe

Tendances

iOSDC 2018 動画をなめらかに動かす技術
iOSDC 2018 動画をなめらかに動かす技術iOSDC 2018 動画をなめらかに動かす技術
iOSDC 2018 動画をなめらかに動かす技術Yuji Hato
 
#idcon vol.29 - #fidcon WebAuthn, Next Stage
#idcon vol.29 - #fidcon WebAuthn, Next Stage#idcon vol.29 - #fidcon WebAuthn, Next Stage
#idcon vol.29 - #fidcon WebAuthn, Next StageNov Matake
 
他社製品と比較した際のAuth0のいいところ
他社製品と比較した際のAuth0のいいところ他社製品と比較した際のAuth0のいいところ
他社製品と比較した際のAuth0のいいところSatoshi Takayanagi
 
LetSwift 2017 - 토스 iOS 앱의 개발/배포 환경
LetSwift 2017 - 토스 iOS 앱의 개발/배포 환경LetSwift 2017 - 토스 iOS 앱의 개발/배포 환경
LetSwift 2017 - 토스 iOS 앱의 개발/배포 환경Mintak Son
 
Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가?
Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가? Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가?
Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가? 정민 안
 
Jenkins 2を使った究極のpipeline ~ 明日もう一度来てください、本物のpipelineをお見せしますよ ~
Jenkins 2を使った究極のpipeline ~ 明日もう一度来てください、本物のpipelineをお見せしますよ ~Jenkins 2を使った究極のpipeline ~ 明日もう一度来てください、本物のpipelineをお見せしますよ ~
Jenkins 2を使った究極のpipeline ~ 明日もう一度来てください、本物のpipelineをお見せしますよ ~ikikko
 
Kongの概要と導入事例
Kongの概要と導入事例Kongの概要と導入事例
Kongの概要と導入事例briscola-tokyo
 
muCon 2016: Authentication in Microservice Systems By David Borsos
muCon 2016: Authentication in Microservice Systems By David BorsosmuCon 2016: Authentication in Microservice Systems By David Borsos
muCon 2016: Authentication in Microservice Systems By David BorsosOpenCredo
 
SwiftUI와 TCA로 GitHub Search앱 만들기
SwiftUI와 TCA로 GitHub Search앱 만들기SwiftUI와 TCA로 GitHub Search앱 만들기
SwiftUI와 TCA로 GitHub Search앱 만들기규영 허
 
RPで受け入れる認証器を選択する ~Idance lesson 2~
RPで受け入れる認証器を選択する ~Idance lesson 2~RPで受け入れる認証器を選択する ~Idance lesson 2~
RPで受け入れる認証器を選択する ~Idance lesson 2~5 6
 
webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話
webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話
webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話Yuhei Miyazato
 
Google Mobile Vision과 OpenCV로 card.io를 확장한 범용 카드번호인식 개발
Google Mobile Vision과 OpenCV로 card.io를 확장한 범용 카드번호인식 개발Google Mobile Vision과 OpenCV로 card.io를 확장한 범용 카드번호인식 개발
Google Mobile Vision과 OpenCV로 card.io를 확장한 범용 카드번호인식 개발Hyukjae Jang
 
Javaで学ぶネットワークプログラミングの基礎
Javaで学ぶネットワークプログラミングの基礎Javaで学ぶネットワークプログラミングの基礎
Javaで学ぶネットワークプログラミングの基礎なべ
 
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAkihiro Kuwano
 
fastlane을 이용하여 iOS/Mac 앱 관리하기
fastlane을 이용하여 iOS/Mac 앱 관리하기fastlane을 이용하여 iOS/Mac 앱 관리하기
fastlane을 이용하여 iOS/Mac 앱 관리하기정민 안
 
【入門編】 ”はじめてのKong” APIゲートウェイとService Meshについて学ぼう!
【入門編】 ”はじめてのKong” APIゲートウェイとService Meshについて学ぼう! 【入門編】 ”はじめてのKong” APIゲートウェイとService Meshについて学ぼう!
【入門編】 ”はじめてのKong” APIゲートウェイとService Meshについて学ぼう! Junji Nishihara
 

Tendances (20)

iOSDC 2018 動画をなめらかに動かす技術
iOSDC 2018 動画をなめらかに動かす技術iOSDC 2018 動画をなめらかに動かす技術
iOSDC 2018 動画をなめらかに動かす技術
 
#idcon vol.29 - #fidcon WebAuthn, Next Stage
#idcon vol.29 - #fidcon WebAuthn, Next Stage#idcon vol.29 - #fidcon WebAuthn, Next Stage
#idcon vol.29 - #fidcon WebAuthn, Next Stage
 
他社製品と比較した際のAuth0のいいところ
他社製品と比較した際のAuth0のいいところ他社製品と比較した際のAuth0のいいところ
他社製品と比較した際のAuth0のいいところ
 
LetSwift 2017 - 토스 iOS 앱의 개발/배포 환경
LetSwift 2017 - 토스 iOS 앱의 개발/배포 환경LetSwift 2017 - 토스 iOS 앱의 개발/배포 환경
LetSwift 2017 - 토스 iOS 앱의 개발/배포 환경
 
Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가?
Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가? Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가?
Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가?
 
Jenkins 2を使った究極のpipeline ~ 明日もう一度来てください、本物のpipelineをお見せしますよ ~
Jenkins 2を使った究極のpipeline ~ 明日もう一度来てください、本物のpipelineをお見せしますよ ~Jenkins 2を使った究極のpipeline ~ 明日もう一度来てください、本物のpipelineをお見せしますよ ~
Jenkins 2を使った究極のpipeline ~ 明日もう一度来てください、本物のpipelineをお見せしますよ ~
 
SwiftのDI方法につい て最近考えてた話
SwiftのDI方法につい て最近考えてた話SwiftのDI方法につい て最近考えてた話
SwiftのDI方法につい て最近考えてた話
 
Kongの概要と導入事例
Kongの概要と導入事例Kongの概要と導入事例
Kongの概要と導入事例
 
muCon 2016: Authentication in Microservice Systems By David Borsos
muCon 2016: Authentication in Microservice Systems By David BorsosmuCon 2016: Authentication in Microservice Systems By David Borsos
muCon 2016: Authentication in Microservice Systems By David Borsos
 
SwiftUI와 TCA로 GitHub Search앱 만들기
SwiftUI와 TCA로 GitHub Search앱 만들기SwiftUI와 TCA로 GitHub Search앱 만들기
SwiftUI와 TCA로 GitHub Search앱 만들기
 
RPで受け入れる認証器を選択する ~Idance lesson 2~
RPで受け入れる認証器を選択する ~Idance lesson 2~RPで受け入れる認証器を選択する ~Idance lesson 2~
RPで受け入れる認証器を選択する ~Idance lesson 2~
 
DevOps勉強会
DevOps勉強会DevOps勉強会
DevOps勉強会
 
webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話
webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話
webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話
 
Google Mobile Vision과 OpenCV로 card.io를 확장한 범용 카드번호인식 개발
Google Mobile Vision과 OpenCV로 card.io를 확장한 범용 카드번호인식 개발Google Mobile Vision과 OpenCV로 card.io를 확장한 범용 카드번호인식 개발
Google Mobile Vision과 OpenCV로 card.io를 확장한 범용 카드번호인식 개발
 
Javaで学ぶネットワークプログラミングの基礎
Javaで学ぶネットワークプログラミングの基礎Javaで学ぶネットワークプログラミングの基礎
Javaで学ぶネットワークプログラミングの基礎
 
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティス
 
KeycloakでAPI認可に入門する
KeycloakでAPI認可に入門するKeycloakでAPI認可に入門する
KeycloakでAPI認可に入門する
 
fastlane을 이용하여 iOS/Mac 앱 관리하기
fastlane을 이용하여 iOS/Mac 앱 관리하기fastlane을 이용하여 iOS/Mac 앱 관리하기
fastlane을 이용하여 iOS/Mac 앱 관리하기
 
PayPayでのk8s活用事例
PayPayでのk8s活用事例PayPayでのk8s活用事例
PayPayでのk8s活用事例
 
【入門編】 ”はじめてのKong” APIゲートウェイとService Meshについて学ぼう!
【入門編】 ”はじめてのKong” APIゲートウェイとService Meshについて学ぼう! 【入門編】 ”はじめてのKong” APIゲートウェイとService Meshについて学ぼう!
【入門編】 ”はじめてのKong” APIゲートウェイとService Meshについて学ぼう!
 

RxSwift Testing 같이 시작하기 feat. RxBlocking, RxTest