Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ユニットテストを学んだ次に知りたかったApple標準APIに対するテストのやり方

ojun
June 04, 2023

 ユニットテストを学んだ次に知りたかったApple標準APIに対するテストのやり方

ojun

June 04, 2023
Tweet

More Decks by ojun

Other Decks in Programming

Transcript

  1. ojun
    ϢχοτςετΛֶΜͩ࣍ʹ ஌Γ͔ͨͬͨ

    Appleඪ४APIʹ ର͢Δςετͷ΍Γํ

    View Slide

  2. ࣗݾ঺հ
    • ໊લ


    • ojunʢ͓͡ΎΜʣ


    • ॴଐ


    • pixivࣄۀຊ෦ΞϓϦΤϯδχΞϦϯά


    • ࠷ۙ͸·͍ͬͯΔ͜ͱ


    • αʔϞϯϥϯ

    View Slide

  3. ࠓճͷൃදʹ͍ͭͯ

    View Slide

  4. ࠓճͷൃදʹ͍ͭͯ
    • Appleඪ४APIʹରͯ͠ϢχοτςετΛ௥Ճ͠Α͏ͱͯ͠ϋϚͬͨ͜ͱ
    ͱɺͦͷղܾํ๏Λɺ؆୯ͳσϞΞϓϦΛ௨ͯ͠ൃද͠·͢


    • ಛʹࠓճ͸ҎԼͷΦϒδΣΫτʹରͯ͠ςετΛ௥Ճͨ͠࿩Λ͠·͢


    • UNUserNoti
    fi
    cationCenter

    View Slide

  5. ର৅

    View Slide

  6. ର৅
    • Ϣχοτςετͷॻ͖ํΛֶͼ࢝Ίͨਓ


    • ΞʔΩςΫνϟʔΛֶͼ࢝Ίͨਓ

    View Slide

  7. σϞΞϓϦ֓ཁ

    View Slide

  8. σϞΞϓϦ֓ཁ
    • 1೔1ճ௨஌͕དྷΔϦϚΠϯυΞϓϦ


    • ෳ਺ͷλεΫ͕ొ࿥Ͱ͖Δ


    • ొ࿥ͨ͠λΠϛϯά͔Β24 * n࣌ؒޙʹϩʔΧϧ௨஌͕དྷΔ


    • λεΫΛ࡟আͰ͖Δ

    View Slide

  9. σϞΞϓϦ֓ཁ

    View Slide

  10. σϞΞϓϦ֓ཁ
    􀄫

    View Slide

  11. σϞΞϓϦ֓ཁ
    􀅉
    􀄫

    View Slide

  12. σϞΞϓϦ֓ཁ
    􀅉
    􀄫
    􀄫

    View Slide

  13. σϞΞϓϦ֓ཁ
    • ϩʔΧϧ௨஌Λද͢ߏ଄ମΛఆٛ


    • ߏ଄ମʹ͸ҎԼͷ3͕ͭଘࡏ


    • ID


    • λΠτϧจݴ


    • ϘσΟͷจݴ

    View Slide

  14. σϞΞϓϦ֓ཁ
    • ొ࿥ͨ͠৘ใ͸UserDefaultsͰอଘ


    • ௥Ճ͞ΕͨλΠϛϯάͰ

    UNUserNoti
    fi
    cationCenterʹ௥Ճ


    • ͪͳΈʹ

    UNUserNoti
    fi
    cationCenterͷpendingRequest

    Λ࢖͏Α͏ʹ͢Ε͹UserDefaultsʹอଘ͢Δඞཁ͸

    ͳ͘ͳΔ

    View Slide

  15. Schedulerͷৄࡉ

    View Slide

  16. Schedulerͷৄࡉ

    View Slide

  17. Schedulerͷৄࡉ

    View Slide

  18. Schedulerͷৄࡉ

    View Slide

  19. লུ

    View Slide

  20. লུ

    View Slide

  21. Schedulerͷৄࡉ

    View Slide

  22. Schedulerͷৄࡉ

    View Slide

  23. Schedulerͷৄࡉ

    View Slide

  24. Schedulerͷৄࡉ

    View Slide

  25. Schedulerͷৄࡉ

    View Slide

  26. • SchedulerΛੜ੒ͨ͠ޙʹ೚ҙͷϝιουΛݺͼग़͢


    • Ҿ਺ʹ͸೚ҙͷLocalNoti
    fi
    cationΛ௥Ճ͢Δ
    Schedulerͷ࢖͍ํ

    View Slide

  27. σϞΞϓϦͷ࣮ߦ

    View Slide

  28. σϞΞϓϦͷ࣮ߦ
    • ӈ্ͷʮ+ʯϘλϯ͔ΒλεΫΛ௥Ճ͢Δ


    • ௥Ճͨ͠λεΫ͕໰୊ͳ͘දࣔ͞ΕΔ


    • λεΫΛ௥Ճͨ͠ޙͷdebugදࣔ͸࣍ͷΑ͏ʹͳΔ

    View Slide

  29. • ໰୊ͳ͘௨஌ͷpending͕Ͱ͖͍ͯΔʂ🎉
    λεΫΛ௥Ճͨ࣌͠ͷdebugදࣔ

    View Slide

  30. ςετ௥Ճ͢Δͧʂ

    View Slide

  31. ௥Ճ͢Δςετͷ಺༰

    View Slide

  32. • ඞཁͳ߲໨Λclass֎ʹఆٛ
    ςετ֓ཁ

    View Slide

  33. • ඞཁͳ߲໨Λclass֎ʹఆٛ


    • localNoti
    fi
    cationΛม਺ͱͯ͠

    ఆٛ
    ςετ֓ཁ

    View Slide

  34. • ҎԼͷςετΛॻ͘৔߹ɺpendig͞ΕͨϩʔΧϧ௨஌ΛऔΓग़͢͜ͱ͕
    Ͱ͖ͳ͍ˠSchedulerΛमਖ਼
    طଘͷModelͷ໰୊఺

    View Slide

  35. লུ

    View Slide

  36. লུ

    View Slide

  37. লུ

    View Slide

  38. • setLocalNoti
    fi
    cationΛ௥Ճͯ͠ϩʔΧϧ௨஌Λొ࿥

    ʢ಺༰: ຖ೔΍Δ͜ͱ / Ոʹண͍ͨΒ͓ṟΛग़͢ ʣ
    ςετΛ௥Ճ͢Δ

    View Slide

  39. • ͖ͬ͞मਖ਼ͨ͠ม਺Λར༻ͯ͠pending͞Εͨ௨஌ΛऔΓग़͠ςετ͢
    Δ


    ςετΛ௥Ճ͢Δ

    View Slide

  40. • ඇಉظͷςετͳͷͰexpectionΛઃఆ͢Δ


    ςετΛ௥Ճ͢Δ

    View Slide

  41. • AssertEqualͷޙʹful
    fi
    ll()͢Δ


    ςετΛ௥Ճ͢Δ

    View Slide

  42. • ςετΛ࣮ߦ͢Δͱ੒ޭ͢Δ🎉


    ςετΛ௥Ճ͢Δ

    View Slide

  43. ࣮ػͰΞϓϦΛىಈ͢Δͱɾɾɾ

    View Slide

  44. ࣮ػͰΞϓϦΛىಈ͢Δͱɾɾɾ
    􀃯

    View Slide

  45. Կ͕໰୊ͩͬͨͷ͔ʁ

    View Slide

  46. Կ͕໰୊ͩͬͨͷ͔
    • UNUserNoti
    fi
    cationCenter.current()ΛςετͰ௚઀ݺͼग़ͯ͠͠·ͬͨ
    লུ

    View Slide

  47. লུ

    View Slide

  48. Ͳ͏͢Ε͹Α͔ͬͨͷ͔

    View Slide

  49. • UNUserNoti
    fi
    cationCenter.current()ΛMock͢Δ


    • Mock͢Δ͜ͱͰ


    • debug / production → UNUserNoti
    fi
    cationCenter.current()


    • test → Mockͨ͠Ϟϊ


    Ͳ͏͢Ε͹Α͔͔ͬͨ

    View Slide

  50. • UserDefaultsͰ͋Ε͹ suiteName Λར༻͢Δ͜ͱͰςετ͢Δࡍʹ
    debugʹӨڹΛ༩͑ͳ͍Α͏ʹ͢Δ͜ͱ͕Մ


    • UserDefaults(suiteName: “pixiv_app_night_for_test”)


    • ͔͠͠ɺUNUserNoti
    fi
    cationCenterʹ͸ଘࡏ͠ͳ͍
    Ͳ͏΍ͬͯMock͢Δͷ͔

    View Slide

  51. • protocolΛར༻͢Δ͜ͱͰඪ४APIʹରͯ͠΋MockΛߦ͑ΔΑ͏ʹ͢Δ
    ͦ͜Ͱ
    6/6TFS/PUJ
    fi
    QSPUPDPM
    6/6TFS/PUJ
    fi
    EFCVHSFMFBTF
    UFTU

    View Slide

  52. • SchedulerΛ࡞Δ࣌ʹߦ͍ͬͯͨ͜ͱͱಉ༷ͷ͜ͱΛߦ͏
    ͦ͜Ͱ

    View Slide

  53. protocolΛఆٛ

    View Slide

  54. ར༻͢ΔϝιουΛఆٛ

    View Slide

  55. ར༻͢ΔϝιουΛఆٛ

    View Slide

  56. extensionΛར༻ͯ͠४ڌͤ͞Δ

    View Slide

  57. Jump to De
    fi
    nitionΛ࢖͏ͱָ

    View Slide

  58. Jump to De
    fi
    nitionΛ࢖͏ͱָ

    View Slide

  59. Jump to De
    fi
    nitionΛ࢖͏ͱָ

    View Slide

  60. Jump to De
    fi
    nitionΛ࢖͏ͱָ

    View Slide

  61. extensionΛར༻ͯ͠४ڌͤ͞Δ

    View Slide

  62. Schedulerͷमਖ਼ ͦͷ1

    View Slide

  63. Schedulerͷमਖ਼ ͦͷ1

    View Slide

  64. Schedulerͷमਖ਼ ͦͷ1

    View Slide

  65. • test༻ͷϞσϧੜ੒ϝιουΛ௥Ճ
    Schedulerͷमਖ਼ ͦͷ2

    View Slide

  66. • test༻ͷϞσϧੜ੒ϝιουΛ௥Ճ
    Schedulerͷमਖ਼ ͦͷ2

    View Slide

  67. Schedulerͷमਖ਼ ͦͷ2
    • γϯάϧτϯΫϥε౳Ͱ `private init`͕࣮૷͞Ε͍ͯͨ৔߹ʹ༗ޮ

    View Slide

  68. Mockͷ࡞੒

    View Slide

  69. Mockͷ࡞੒

    View Slide

  70. Mockͷ࡞੒

    View Slide

  71. Mockͷ࡞੒

    View Slide

  72. Mockͷ࡞੒

    View Slide

  73. Mockͷ࡞੒

    View Slide

  74. Mockͷ࡞੒

    View Slide

  75. ςετमਖ਼

    View Slide

  76. ςετͷमਖ਼

    View Slide

  77. ςετͷमਖ਼

    View Slide

  78. ςετͷमਖ਼

    View Slide

  79. View Slide

  80. View Slide

  81. View Slide

  82. View Slide

  83. ࠓ౓ͦ͜ςετ੒ޭ🎉
    􀇻

    View Slide

  84. ·ͱΊ

    View Slide

  85. ·ͱΊ
    • Ϣχοτςετ࣌ʹMockΛར༻͠ͳ͍ͱdebugϏϧυʹӨڹΛ༩͑Δ
    ͜ͱ͕͋Δ


    • ඪ४APIʹରͯ͠MockΛ͢Δͱ͖͸protocolΛ࡞੒ͯ͠ର৅ͷΫϥε
    ʢΦϒδΣΫτʣʹ४ڌͤ͞Δ

    View Slide

  86. ·ͱΊ

    View Slide

  87. ·ͱΊ

    View Slide

  88. ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ

    View Slide