$30 off During Our Annual Pro Sale. View Details »

RxSwiftのテスト入門

100059
April 16, 2019

 RxSwiftのテスト入門

RxSwiftのコードへのテストの書き方の流れ

100059

April 16, 2019
Tweet

More Decks by 100059

Other Decks in Technology

Transcript

  1. RxSwiftͷςετೖ໳
    iOS Test Night #10
    2019/04/16

    View Slide

  2. Akihisa Sengoku
    גࣜձࣾαΠόʔΤʔδΣϯτ
    AmebaʢΞϝʔόʣ
    iOSΤϯδχΞ

    View Slide

  3. Amebaͷ࠷ۙͷ։ൃ
    ʢiOS Teamʣ

    View Slide

  4. 2018
    +
    MVVM
    2019
    RxͷςετΛ
    ॻ͖࢝ΊΔ
    MVC
    MVVM
    etc…

    View Slide

  5. RxSwiftͰͷςετ͸ͳ͔ͳ͔
    ೉͍͠ɻɻɻ

    View Slide

  6. ຊ೔ͷ಺༰
    3Y4XJGUͷίʔυ΁ͷ
    ςετͷॻ͖ํͷྲྀΕ
    ʢͬ͘͟Γͱʣ
    3Y4XJGUͰͷςετͷཧղ͕͕͋Ε͹ʜ

    View Slide

  7. ςετΛॻ͘ର৅
    จࣈҎ্Ͱొ࿥͢Δ͜ͱ͕Մೳͳ
    ؆୯ͳϑΥʔϜ

    View Slide

  8. 7JFX
    ඳը

    7JFX.PEFM
    ϩδοΫ

    ςΩετೖྗ
    Ϙλϯͷ
    &OBCMF
    ߦະຬ
    ˠ'BMTF
    ̏ߦҎ্
    ˠ5SVF
    RxSwiftΛ࢖ͬͨMVVMͰͷVM૚ʹςετΛॻ͘͜ͱΛ૝ఆ

    View Slide

  9. 7JFX
    ඳը

    7JFX.PEFM
    ϩδοΫ

    ςΩετೖྗ
    Ϙλϯͷ
    &OBCMF
    ߦະຬ
    ˠ'BMTF
    ̏ߦҎ্
    ˠ5SVF
    ୯ମςετͰ͖ͦ͏ʁʁ
    RxSwiftΛ࢖ͬͨMVVMͰͷVM૚ʹςετΛॻ͘͜ͱΛ૝ఆ

    View Slide

  10. 7JFX
    ඳը

    7JFX.PEFM
    ϩδοΫ

    ςΩετೖྗ
    Ϙλϯͷ
    &OBCMF
    ߦະຬ
    ˠ'BMTF
    ̏ߦҎ্
    ˠ5SVF
    ୯ମςετͰ͖ͦ͏ʁʁ
    RxSwiftΛ࢖ͬͨMVVMͰͷVM૚ʹςετΛॻ͘͜ͱΛ૝ఆ

    View Slide

  11. 7JFX
    ඳը

    7JFX.PEFM
    ϩδοΫ

    0CTFSWBCMF4USJOH
    0CTFSWBCMF#PPM
    ςΩετೖྗ
    Ϙλϯͷ
    &OBCMF

    ' ' 5 5

    View Slide

  12. 7JFX
    ඳը

    7JFX.PEFM
    ϩδοΫ

    0CTFSWBCMF4USJOH
    0CTFSWBCMF#PPM
    ςΩετೖྗ
    Ϙλϯͷ
    &OBCMF

    ' ' 5 5
    0CTFSWBCMF͸Ұ࿈ͷ஋ͷྲྀΕ ετϦʔϜ
    Ͱ͋Γɺ
    ୯Ұͷ஋ͱͯ͠ςετ͢Δ͜ͱ͕ࠔ೉

    View Slide

  13. 7JFX
    ඳը

    7JFX.PEFM
    ϩδοΫ

    0CTFSWBCMF4USJOH
    0CTFSWBCMF#PPM
    ςΩετೖྗ
    Ϙλϯͷ
    &OBCMF

    ' ' 5 5
    ʲ*OQVUʳΠϕϯτͷ࣌ؒͱ஋Λࢦఆͯ͠ɺ
    0CTFSWBCMFʹ஋Λྲྀ͢͜ͱ͕ࠔ೉

    View Slide

  14. 7JFX
    ඳը

    7JFX.PEFM
    ϩδοΫ

    0CTFSWBCMF4USJOH
    0CTFSWBCMF#PPM
    ςΩετೖྗ
    Ϙλϯͷ
    &OBCMF

    ' ' 5 5
    ʲ0VUQVUʳྲྀΕͨΠϕϯτͷ࣌ؒͱ஋Λ
    ·ͱΊͯऔಘ͢Δ͜ͱ͕ࠔ೉

    View Slide

  15. 7JFX
    ඳը

    7JFX.PEFM
    ϩδοΫ

    0CTFSWBCMF4USJOH
    0CTFSWBCMF#PPM
    ςΩετೖྗ
    Ϙλϯͷ
    &OBCMF

    ' ' 5 5
    ࣮࣌ؒͰಈ͍͍ͯΔͨΊɺ
    ςετʹ͕͔͔࣌ؒͬͯ͠·͏ɻ

    View Slide

  16. RxSwiftͷObservableΛ
    ͲͷΑ͏ʹ
    ςετ͢Δͷ͔ʁʁ

    View Slide

  17. RxTest
    RxSwiftͷϨϙδτϦʔ಺ʹ͋ΔRxSwiftͷͨ
    ΊͷςετϑϨʔϜϫʔΫ
    ઌ΄Ͳͷ໰୊Λղܾ͢ΔͨΊʹ
    TestSchedulerͱ͍͏ಛผͳScheduler͕͋Δ

    View Slide

  18. TestScheduler
    • Ծ૝࣌ؒΛج४ͱͨ͠ObservableͱObserverͷϞοΫͰ͋Δ
    TestableObservableͱTestableObserverΛੜ੒͢Δɻ
    ← ࣮࣌ؒͰͷςετ໰୊Λղܾ
    • TestableObservable͸ɺ࡞੒࣌ʹྲྀ͢Πϕϯτͷ஋ͱ࣌ؒΛࢦ
    ఆͯ͠ɺྲྀ͢͜ͱ͕Ͱ͖Δɻ ← InputΛղܾ
    • TestableObserver͸ɺΠϕϯτͷ࣌ؒͱ஋Λه࿥͢Δ͜ͱ͕Ͱ
    ͖Δ ← OutputΛղܾ

    View Slide

  19. 5FTU4DIFEVMFS
    5FTUBCMF0CTFSWBCMF 5FTUBCMF0CTFSWFS
    ࡞੒

    View Slide

  20. 5FTU4DIFEVMFS
    5FTUBCMF0CTFSWBCMF 5FTUBCMF0CTFSWFS
    ࡞੒
    ࡞੒࣌ʹΠϕϯτΛ
    ొ࿥Մೳ
    Πϕϯτͷऔಘ

    ' ' 5 5

    View Slide

  21. 5FTU4DIFEVMFS
    5FTUBCMF0CTFSWBCMF 5FTUBCMF0CTFSWFS
    ࡞੒
    ࡞੒࣌ʹΠϕϯτΛ
    ొ࿥Մೳ
    Πϕϯτͷऔಘ

    ' ' 5 5
    ࣌ؒͱ*OQVUͱ0VUQVUͷ໰୊Λղܾʂ

    View Slide

  22. 5FTU4DIFEVMFS
    5FTUBCMF0CTFSWBCMF 5FTUBCMF0CTFSWFS
    ࡞੒
    ࡞੒࣌ʹΠϕϯτΛ
    ొ࿥Մೳ
    Πϕϯτͷऔಘ

    ' ' 5 5
    ΠϕϯτΛͲͷΑ͏ʹѻ͏ͷ͔ʁʁ

    View Slide

  23. Recorded
    /// Record of a value including the virtual time it was produced on.
    public struct Recorded: CustomDebugStringConvertible {
    /// Gets the virtual time the value was produced on.
    public let time: TestTime
    /// Gets the recorded value.
    public let value: Value
    public init(time: TestTime, value: Value) {
    self.time = time
    self.value = value
    }
    }
    ΠϕϯτͰੜ੒͞Εͨ஋ͱ
    ஋͕ੜ੒͞ΕͨԾ૝࣌ؒΛอ࣋ɻ

    View Slide

  24. Recorded
    ΠϕϯτͰੜ੒͞Εͨ஋ͱ
    ஋͕ੜ੒͞ΕͨԾ૝࣌ؒΛอ࣋ɻ
    3FDPSEFE
    <3FDPSEFE>

    View Slide

  25. 5FTU4DIFEVMFS
    5FTUBCMF0CTFSWBCMF 5FTUBCMF0CTFSWFS
    ࡞੒
    ࡞੒࣌ʹ<3FDPSEFE>Ͱ
    ΠϕϯτΛొ࿥
    ΠϕϯτΛ
    <3FDPSEFE>Ͱऔಘ

    ' ' 5 5

    View Slide

  26. 7JFX
    ඳը

    7JFX.PEFM
    ϩδοΫ

    0CTFSWBCMF4USJOH
    0CTFSWBCMF#PPM
    ςΩετೖྗ
    Ϙλϯͷ
    &OBCMF

    View Slide

  27. 7JFX
    ඳը

    7JFX.PEFM
    ϩδοΫ

    ςΩετೖྗ
    Ϙλϯͷ
    &OBCMF
    ᶃ5FTU4DIFEVMFSͰ<3FDPSEFE>Λ
    Λ΋ͱʹ5FTUBCMF0CTFSWBCMFΛ࡞੒

    0CTFSWBCMF#PPM
    <3FDPSEFE>
    5FTUBCMF0CTFSWBCMF4USJOH

    View Slide

  28. 7JFX
    ඳը

    7JFX.PEFM
    ϩδοΫ

    5FTUBCMF0CTFSWBCMF4USJOH
    ςΩετೖྗ
    Ϙλϯͷ
    &OBCMF
    ᶄ5FTU4DIFEVMFSͰΠϕϯτΛड͚औΔ
    5FTUBCMF0CTFSWFSΛ࡞੒

    5FTUBCMF0CTFSWFS#PPM
    <3FDPSEFE>

    View Slide

  29. 7JFX
    ඳը

    7JFX.PEFM
    ϩδοΫ

    5FTUBCMF0CTFSWBCMF4USJOH
    ςΩετೖྗ
    Ϙλϯͷ
    &OBCMF
    ᶅ5FTU4DIFEVMFSΛ։࢝ͯ͠ɺ
    5FTUBCMF0CTFSWFS͔Β<3FDPSEFE>ͷ஋Λऔಘ

    5FTUBCMF0CTFSWFS#PPM
    <3FDPSEFE>
    ' ' 5 5
    <3FDPSEFE>

    View Slide

  30. 7JFX
    ඳը

    7JFX.PEFM
    ϩδοΫ

    5FTUBCMF0CTFSWBCMF4USJOH
    ςΩετೖྗ
    Ϙλϯͷ
    &OBCMF
    ᶆ<3FDPSEFE>ͷ஋Λςετ
    ˠςετ׬ྃ

    5FTUBCMF0CTFSWFS#PPM
    <3FDPSEFE>
    ' ' 5 5 <3FDPSEFE>

    View Slide

  31. RxTestͷTestSchedulerʹΑͬͯ
    RxSwiftͷObservableͷςετ͕
    Մೳʹʂʂ

    View Slide

  32. ·ͱΊ
    • RxSwiftͷObservableΛςετ͢Δͷ͸ࠔ೉
    • ObservableΛςετ͢ΔͨΊʹRxSwiftͷ
    TestSchedulerΛ࢖༻
    • TestSchedulerʹΑͬͯTestableObservableͱ
    TestableObserverΛ࡞੒ͯ͠ςετ͢Δ

    View Slide