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
140
Exit 8 for SwiftUI
ojun9
1
210
Swift Evolution かるた
ojun9
2
110
Xcode 16のPreviewModifierと@Previewableを活用した効率的なプレビュー方法の考察
ojun9
4
900
Catch Up with Swift 5.10
ojun9
2
850
Overview: Swift OpenAPI Generator
ojun9
3
2.3k
if 式と switch 式による SwiftUI のプレビューエラー対策
ojun9
1
2k
楽しい夏休み!String Catalogs で新しい発見
ojun9
0
2.3k
ハッカソンにおけるiOSアプリ開発での学びと楽しさ
ojun9
1
350
Other Decks in Programming
See All in Programming
非同期jobをtransaction内で 呼ぶなよ!絶対に呼ぶなよ!
alstrocrack
0
520
Advance Your Career with Open Source
ivargrimstad
0
330
10年もののAPIサーバーにおけるCI/CDの改善の奮闘
mbook
0
770
私達はmodernize packageに夢を見るか feat. go/analysis, go/ast / Go Conference 2025
kaorumuta
2
490
育てるアーキテクチャ:戦い抜くPythonマイクロサービスの設計と進化戦略
fujidomoe
1
150
ポスターセッション: 「まっすぐ行って、右!」って言ってラズパイカーを動かしたい 〜生成AI × Raspberry Pi Pico × Gradioの試作メモ〜
komofr
0
950
Back to the Future: Let me tell you about the ACP protocol
terhechte
0
130
LLMとPlaywright/reg-suitを活用した jQueryリファクタリングの実際
kinocoboy2
4
670
CSC305 Lecture 04
javiergs
PRO
0
250
Reduxモダナイズ 〜コードのモダン化を通して、将来のライブラリ移行に備える〜
pvcresin
2
680
WebエンジニアがSwiftをブラウザで動かすプレイグラウンドを作ってみた
ohmori_yusuke
0
170
株式会社 Sun terras カンパニーデック
sunterras
0
220
Featured
See All Featured
The Illustrated Children's Guide to Kubernetes
chrisshort
48
51k
Raft: Consensus for Rubyists
vanstee
139
7.1k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
890
Practical Orchestrator
shlominoach
190
11k
Visualization
eitanlees
148
16k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
Building Better People: How to give real-time feedback that sticks.
wjessup
368
20k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.6k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Bash Introduction
62gerente
615
210k
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Λ࡞ͯ͠ରͷΫϥε ʢΦϒδΣΫτʣʹ४ڌͤ͞Δ
·ͱΊ
·ͱΊ
͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ