Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

169 views

Published on

RxBlocking과 RxTest를 통해 RxSwift를 테스트하는 법을 간단하게 알아봅시다.

Published in: Software

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

  1. 1. 뱅크샐러드이병찬 RxTest 같이 시작하기 RxTest, RxBlocking을 같이 알아보기!
  2. 2. 뱅크샐러드이병찬 RxTest 같이 시작하기 RxTest, RxBlocking을 같이 알아보기!
  3. 3. 1. TestCode, ObservableTestCode란? 2. RxBlocking에 대해 3. RxTest에 대해 4. RxSwift를 테스트해보자! 목차
  4. 4. 1. TestCode란?
  5. 5. 어떤 동작을 수행 했을 때 1) 원하는 값이 나오는지 검증 2) 연속되어야 하는 동작이 수행되는지 검증 TestCode란?
  6. 6. 원하는 값이 나오는지
  7. 7. 원하는 값이 나오는지
  8. 8. 원하는 값이 나오는지
  9. 9. 원하는 값이 나오는지 값이 원하는 형태로 나오는지 검증
  10. 10. 연속되어야 하는 동작을 수행하는지
  11. 11. 연속되어야 하는 동작을 수행하는지
  12. 12. 연속되어야 하는 동작을 수행하는지
  13. 13. 연속되어야 하는 동작을 수행하는지
  14. 14. 연속되어야 하는 동작을 수행하는지 연속되어야 하는 동작의 수행 검증
  15. 15. 그럼 Observable은?
  16. 16. RxTest 새내기 "이뱅샐"
  17. 17. Event를 동기적으로 받을 수는 없을까? subscribe없이 Event를 받을 수는 없을까?
  18. 18. Hot Observable일 때는? reduce도 못하는데…
  19. 19. 기대하는 타이밍에 Event가 나오는지 검증은? 버튼 눌렀을 때 Event가 나오는지 검증해야 하잖아?
  20. 20. /* Event를 간단하게 추출할 수 있어야 함 /* 원하는 값이 원하는 타이밍에 나오는지 검증
  21. 21. RxBlocking RxTest 어서와, 테스트는 처음이지?
  22. 22. 2. RxBlocking
  23. 23. 🍏 🍇 🌶 🌽 🍉
  24. 24. 🍏 🍇 🌶 🌽 🍉 ➜ [ 🍏, 🍇, 🌶, 🌽, 🍉 ]
  25. 25. onComplete가 떨어질 때까지 기다린다…
  26. 26. 🍏 🍇 🌶 🌽 🍉 ➜ [ 🍏, 🍇, 🌶, 🌽, 🍉 ] onComplete가 꼭 떨어져야 함
  27. 27. .toBlocking(timeout: RxTimeInterval?)
  28. 28. 🍏 🍇 🌶 🌽 🍉 [ 🍏, 🍇, 🌶 ] ➜
  29. 29. - ColdObservable의 Event를 검증할 때 사용 - 특정 시간동안 방출된 Observable의 Event도 검증 가능 • HotObservable도 사용 가능 RxBlocking은
  30. 30. 3. RxTest
  31. 31. 1초 2초 3초 4초 5초 🍏 🍇 🌶 🌽 🍉 ➜ [ (🍏, 1초), (🍇, 2초), (🌶, 3초), (🌽, 4초), (🍉, 5초) ] ➜ 3초에 🌶가 나왔는가?
  32. 32. let buttonTapped = s.createHotObservable([ .next(1, Void()), .next(3, Void()) ])
  33. 33. 구독의 여부와 상관없이 이벤트 발생
  34. 34. 구독이 시작되면 정해진 순서대로 이벤트 발생
  35. 35. 1초 2초 3초 4초 5초 🍏 🍇 🌶 🌽 🍉 👀 관찰 👀 ➜➜ [ (🍏, 1초), (🍇, 2초), (🌶, 3초), (🌽, 4초), (🍉, 5초) ]
  36. 36. 👀 가상의 시간이 모두 흐를 때까지 관찰 👀
  37. 37. 👀 가상의 시간이 모두 흐를 때까지 관찰 👀 Observable이 끝나지 않아도 상관X
  38. 38. 👀 가상의 시간이 모두 흐를 때까지 관찰 👀 Hot Observable도 테스트 가능!
  39. 39. 가상의 시간이 모두 흐를때까지..
  40. 40. - Observable에 시간개념을 넣어줌 • 이를 통해 언제 무엇이 나왔는지 검증 가능 - Observer를 통해 Hot, Cold 모두 검증가능 • 가상의 시간이 다 흐를 때까지 관찰 후 타이밍과 Event 반환 RxTest는?
  41. 41. 4. RxSwift를 테스트하자
  42. 42. - 원하는 값이 정상적으로 나오는지 검증 - Response에 상관없이 예상하는 결과가 나오는지 "isLoading" TestCase
  43. 43.
  44. 44. - tapped 되었을 때 마다 원하는 값이 정상적으로 나오는지 검증 - Response에 상관없이 예상하는 결과가 나오는지 "loading" TestCase
  45. 45. ✨ ✨ ✨
  46. 46. - Mocking, 가상의 시간, Observer.. 언제 배우나? - TestCode보다 기능 개발이 더 우선 아니야? RxBlocking, RxTest....
  47. 47. func removeAllData() { /* 구현 */ Implements() }
  48. 48. func removeAllData() { /* 구현 */ Implements() } 만약 삭제에서 누락된 데이터가 있다면?
  49. 49. 당연하게 동작할 것 같은 코드의 배신 ➜ Hotfix
  50. 50. TestCode는 당연한 코드가 당연하게 동작하는지 검증
  51. 51. RxSwift의 TestCode는 Observable이 당연하게 방출되는지 검증
  52. 52. “RxSwift & 테스트코드와 함께 금융의 혁신을 만들어갈 전사들을 뱅샐은 기다립니다.”
  53. 53. - 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 참고자료
  54. 54. slido.com / #P445

×