Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ユニットテストを学んだ次に知りたかったApple標準APIに対するテストのやり方
Search
ojun
June 04, 2023
Programming
1
440
ユニットテストを学んだ次に知りたかったApple標準APIに対するテストのやり方
ojun
June 04, 2023
Tweet
Share
More Decks by ojun
See All by ojun
アセットのコンパイルについて
ojun9
0
130
Exit 8 for SwiftUI
ojun9
1
210
Swift Evolution かるた
ojun9
2
110
Xcode 16のPreviewModifierと@Previewableを活用した効率的なプレビュー方法の考察
ojun9
4
890
Catch Up with Swift 5.10
ojun9
2
850
Overview: Swift OpenAPI Generator
ojun9
3
2.3k
if 式と switch 式による SwiftUI のプレビューエラー対策
ojun9
1
1.9k
楽しい夏休み!String Catalogs で新しい発見
ojun9
0
2.3k
ハッカソンにおけるiOSアプリ開発での学びと楽しさ
ojun9
1
350
Other Decks in Programming
See All in Programming
Processing Gem ベースの、2D レトロゲームエンジンの開発
tokujiros
2
130
デザイナーが Androidエンジニアに 挑戦してみた
874wokiite
0
520
今だからこそ入門する Server-Sent Events (SSE)
nearme_tech
PRO
3
240
Ruby Parser progress report 2025
yui_knk
1
450
Navigating Dependency Injection with Metro
zacsweers
3
2.3k
2025 年のコーディングエージェントの現在地とエンジニアの仕事の変化について
azukiazusa1
24
12k
ぬるぬる動かせ! Riveでアニメーション実装🐾
kno3a87
1
230
Cache Me If You Can
ryunen344
2
2.8k
請來的 AI Agent 同事們在寫程式時,怎麼用 pytest 去除各種幻想與盲點
keitheis
0
120
@Environment(\.keyPath)那么好我不允许你们不知道! / atEnvironment keyPath is so good and you should know it!
lovee
0
120
スケールする組織の実現に向けた インナーソース育成術 - ISGT2025
teamlab
PRO
1
120
詳解!defer panic recover のしくみ / Understanding defer, panic, and recover
convto
0
250
Featured
See All Featured
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
139
34k
Into the Great Unknown - MozCon
thekraken
40
2k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
Facilitating Awesome Meetings
lara
55
6.5k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
YesSQL, Process and Tooling at Scale
rocio
173
14k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.1k
Git: the NoSQL Database
bkeepers
PRO
431
66k
Context Engineering - Making Every Token Count
addyosmani
3
51
Gamification - CAS2011
davidbonilla
81
5.4k
Designing for Performance
lara
610
69k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.9k
Transcript
ojun ϢχοτςετΛֶΜͩ࣍ʹ Γ͔ͨͬͨ Appleඪ४APIʹ ର͢ΔςετͷΓํ
ࣗݾհ • ໊લ • ojunʢ͓͡ΎΜʣ • ॴଐ • pixivࣄۀຊ෦ΞϓϦΤϯδχΞϦϯά •
࠷ۙ·͍ͬͯΔ͜ͱ • αʔϞϯϥϯ
ࠓճͷൃදʹ͍ͭͯ
ࠓճͷൃදʹ͍ͭͯ • Appleඪ४APIʹରͯ͠ϢχοτςετΛՃ͠Α͏ͱͯ͠ϋϚͬͨ͜ͱ ͱɺͦͷղܾํ๏Λɺ؆୯ͳσϞΞϓϦΛ௨ͯ͠ൃද͠·͢ • ಛʹࠓճҎԼͷΦϒδΣΫτʹରͯ͠ςετΛՃͨ͠Λ͠·͢ • UNUserNoti fi cationCenter
ର
ର • Ϣχοτςετͷॻ͖ํΛֶͼ࢝Ίͨਓ • ΞʔΩςΫνϟʔΛֶͼ࢝Ίͨਓ
σϞΞϓϦ֓ཁ
σϞΞϓϦ֓ཁ • 11ճ௨͕དྷΔϦϚΠϯυΞϓϦ • ෳͷλεΫ͕ొͰ͖Δ • ొͨ͠λΠϛϯά͔Β24 * n࣌ؒޙʹϩʔΧϧ௨͕དྷΔ •
λεΫΛআͰ͖Δ
σϞΞϓϦ֓ཁ
σϞΞϓϦ֓ཁ
σϞΞϓϦ֓ཁ
σϞΞϓϦ֓ཁ
σϞΞϓϦ֓ཁ • ϩʔΧϧ௨Λද͢ߏମΛఆٛ • ߏମʹҎԼͷ3͕ͭଘࡏ • ID • λΠτϧจݴ •
ϘσΟͷจݴ
σϞΞϓϦ֓ཁ • ొͨ͠ใUserDefaultsͰอଘ • Ճ͞ΕͨλΠϛϯάͰ UNUserNoti fi cationCenterʹՃ •
ͪͳΈʹ UNUserNoti fi cationCenterͷpendingRequest Λ͏Α͏ʹ͢ΕUserDefaultsʹอଘ͢Δඞཁ ͳ͘ͳΔ
Schedulerͷৄࡉ
Schedulerͷৄࡉ
Schedulerͷৄࡉ
Schedulerͷৄࡉ
লུ
লུ
Schedulerͷৄࡉ
Schedulerͷৄࡉ
Schedulerͷৄࡉ
Schedulerͷৄࡉ
Schedulerͷৄࡉ
• SchedulerΛੜͨ͠ޙʹҙͷϝιουΛݺͼग़͢ • ҾʹҙͷLocalNoti fi cationΛՃ͢Δ Schedulerͷ͍ํ
σϞΞϓϦͷ࣮ߦ
σϞΞϓϦͷ࣮ߦ • ӈ্ͷʮ+ʯϘλϯ͔ΒλεΫΛՃ͢Δ • Ճͨ͠λεΫ͕ͳ͘දࣔ͞ΕΔ • λεΫΛՃͨ͠ޙͷdebugදࣔ࣍ͷΑ͏ʹͳΔ
• ͳ͘௨ͷpending͕Ͱ͖͍ͯΔʂ🎉 λεΫΛՃͨ࣌͠ͷdebugදࣔ
ςετՃ͢Δͧʂ
Ճ͢Δςετͷ༰
• ඞཁͳ߲Λclass֎ʹఆٛ ςετ֓ཁ
• ඞཁͳ߲Λclass֎ʹఆٛ • localNoti fi cationΛมͱͯ͠ ఆٛ ςετ֓ཁ
• ҎԼͷςετΛॻ͘߹ɺpendig͞ΕͨϩʔΧϧ௨ΛऔΓग़͢͜ͱ͕ Ͱ͖ͳ͍ˠSchedulerΛमਖ਼ طଘͷModelͷ
লུ
লུ
লུ
• setLocalNoti fi cationΛՃͯ͠ϩʔΧϧ௨Λొ ʢ༰: ຖΔ͜ͱ / Ոʹண͍ͨΒ͓ṟΛग़͢ ʣ
ςετΛՃ͢Δ
• ͖ͬ͞मਖ਼ͨ͠มΛར༻ͯ͠pending͞Εͨ௨ΛऔΓग़͠ςετ͢ Δ ςετΛՃ͢Δ
• ඇಉظͷςετͳͷͰexpectionΛઃఆ͢Δ ςετΛՃ͢Δ
• AssertEqualͷޙʹful fi ll()͢Δ ςετΛՃ͢Δ
• ςετΛ࣮ߦ͢Δͱޭ͢Δ🎉 ςετΛՃ͢Δ
࣮ػͰΞϓϦΛىಈ͢Δͱɾɾɾ
࣮ػͰΞϓϦΛىಈ͢Δͱɾɾɾ
Կ͕ͩͬͨͷ͔ʁ
Կ͕ͩͬͨͷ͔ • UNUserNoti fi cationCenter.current()ΛςετͰݺͼग़ͯ͠͠·ͬͨ লུ
লུ
Ͳ͏͢ΕΑ͔ͬͨͷ͔
• UNUserNoti fi cationCenter.current()ΛMock͢Δ • Mock͢Δ͜ͱͰ • debug / production
→ UNUserNoti fi cationCenter.current() • test → Mockͨ͠Ϟϊ Ͳ͏͢ΕΑ͔͔ͬͨ
• UserDefaultsͰ͋Ε suiteName Λར༻͢Δ͜ͱͰςετ͢Δࡍʹ debugʹӨڹΛ༩͑ͳ͍Α͏ʹ͢Δ͜ͱ͕Մ • UserDefaults(suiteName: “pixiv_app_night_for_test”) • ͔͠͠ɺUNUserNoti
fi cationCenterʹଘࡏ͠ͳ͍ Ͳ͏ͬͯMock͢Δͷ͔
• protocolΛར༻͢Δ͜ͱͰඪ४APIʹରͯ͠MockΛߦ͑ΔΑ͏ʹ͢Δ ͦ͜Ͱ 6/6TFS/PUJ fi QSPUPDPM 6/6TFS/PUJ fi EFCVHSFMFBTF UFTU
• SchedulerΛ࡞Δ࣌ʹߦ͍ͬͯͨ͜ͱͱಉ༷ͷ͜ͱΛߦ͏ ͦ͜Ͱ
protocolΛఆٛ
ར༻͢ΔϝιουΛఆٛ
ར༻͢ΔϝιουΛఆٛ
extensionΛར༻ͯ͠४ڌͤ͞Δ
Jump to De fi nitionΛ͏ͱָ
Jump to De fi nitionΛ͏ͱָ
Jump to De fi nitionΛ͏ͱָ
Jump to De fi nitionΛ͏ͱָ
extensionΛར༻ͯ͠४ڌͤ͞Δ
Schedulerͷमਖ਼ ͦͷ1
Schedulerͷमਖ਼ ͦͷ1
Schedulerͷमਖ਼ ͦͷ1
• test༻ͷϞσϧੜϝιουΛՃ Schedulerͷमਖ਼ ͦͷ2
• test༻ͷϞσϧੜϝιουΛՃ Schedulerͷमਖ਼ ͦͷ2
Schedulerͷमਖ਼ ͦͷ2 • γϯάϧτϯΫϥεͰ `private init`͕࣮͞Ε͍ͯͨ߹ʹ༗ޮ
Mockͷ࡞
Mockͷ࡞
Mockͷ࡞
Mockͷ࡞
Mockͷ࡞
Mockͷ࡞
Mockͷ࡞
ςετमਖ਼
ςετͷमਖ਼
ςετͷमਖ਼
ςετͷमਖ਼
None
None
None
None
ࠓͦ͜ςετޭ🎉
·ͱΊ
·ͱΊ • Ϣχοτςετ࣌ʹMockΛར༻͠ͳ͍ͱdebugϏϧυʹӨڹΛ༩͑Δ ͜ͱ͕͋Δ • ඪ४APIʹରͯ͠MockΛ͢Δͱ͖protocolΛ࡞ͯ͠ରͷΫϥε ʢΦϒδΣΫτʣʹ४ڌͤ͞Δ
·ͱΊ
·ͱΊ
͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ