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
Azure SRE Agentで運用は楽になるのか?
kkamegawa
0
2.5k
さようなら Date。 ようこそTemporal! 3年間先行利用して得られた知見の共有
8beeeaaat
3
1.5k
Updates on MLS on Ruby (and maybe more)
sylph01
1
180
「手軽で便利」に潜む罠。 Popover API を WCAG 2.2の視点で安全に使うには
taitotnk
0
870
複雑なドメインに挑む.pdf
yukisakai1225
5
1.2k
Kiroで始めるAI-DLC
kaonash
2
630
go test -json そして testing.T.Attr / Kyoto.go #63
utgwkk
3
320
testingを眺める
matumoto
1
140
OSS開発者という働き方
andpad
5
1.7k
MCPでVibe Working。そして、結局はContext Eng(略)/ Working with Vibe on MCP And Context Eng
rkaga
5
2.3k
Navigation 2 を 3 に移行する(予定)ためにやったこと
yokomii
0
350
テストコードはもう書かない:JetBrains AI Assistantに委ねる非同期処理のテスト自動設計・生成
makun
0
550
Featured
See All Featured
Unsuck your backbone
ammeep
671
58k
Designing for Performance
lara
610
69k
Navigating Team Friction
lara
189
15k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
How to Think Like a Performance Engineer
csswizardry
26
1.9k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
930
Building an army of robots
kneath
306
46k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Raft: Consensus for Rubyists
vanstee
140
7.1k
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Λ࡞ͯ͠ରͷΫϥε ʢΦϒδΣΫτʣʹ४ڌͤ͞Δ
·ͱΊ
·ͱΊ
͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ