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
How to write basic unittests
Search
tanako
March 26, 2017
Technology
250
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
How to write basic unittests
基本的なユニットテストの書き方について、ユーティリティクラスを例に説明します。
tanako
March 26, 2017
More Decks by tanako
See All by tanako
タイミーiOSアプリへの Swift Concurrency 導入までの軌跡
_tanako
4
2.1k
SwiftPM Integration into Xcode
_tanako
0
180
roppongiswift6.pdf
_tanako
1
450
iOSエンジニアの為のgrpc-swift入門
_tanako
6
5.3k
grpc-swiftの紹介
_tanako
0
1.8k
Other Decks in Technology
See All in Technology
発表と総括 / Presentations and Summary
ks91
PRO
0
190
データエンジニアリングとドメイン駆動設計
masuda220
PRO
14
2.5k
Aurora MySQL 8.4リリース! Rubyistが備えること / what-rubyist-should-prepare-for-aurora-mysql-8-4
fkmy
0
780
AIエージェントがあれば技術書なんてすぐ書けるでしょ→無理でした
watany
2
290
OPENLOGI Company Profile for engineer
hr01
1
74k
人とエージェントが高め合う協業設計
kintotechdev
0
760
穢れた技術選定について
watany
19
6.2k
テックカンファレンス三大ステークホルダーの文化人類学 ─ 違いを認め合う関係性作り
bash0c7
1
240
仕様駆動開発、導入半年。「本当に速くなってるの?」にデータで答える / AICon2026_hirakawa
rakus_dev
0
320
プロダクト開発組織の現在地(Ver.2026/07) / product-organization
kaonavi
0
400
Playwright × AI Agent でE2Eテストはどう変わるか AI駆動テストの可能性と実用検証の結果
taiga7543
2
810
AIとハーネスで育てるトランスコンパイラ / 20260722 Yasushi Katayama
shift_evolve
PRO
3
780
Featured
See All Featured
30 Presentation Tips
portentint
PRO
1
350
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
490
Navigating Weather and Climate Data
rabernat
0
400
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
880
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.7k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.2k
Automating Front-end Workflow
addyosmani
1370
210k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.1k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
Producing Creativity
orderedlist
PRO
348
40k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
410
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
Transcript
How to write basic UnitTest (جຊతͳϢχοτςετͷॻ͖ํ) @tikidunpon GEEK GARAGE iOS
vol2
ςετ্͕ͬͯ·͔͢ʁ try!swift!Ͱྑ͍ςετͷ͕͍͔ͭ͋͘Γ·ͨ͠Ͷʂ ͜ͷηογϣϯ͕ྑ͔ͬͨͰ͢ʂ http:/ /qualitycoding.org/files/SwiftMocks.pdf
͢͜ͱ • جຊతͳϢχοτςετٕ๏ ͞ͳ͍͜ͱ • ςετͷηοτΞοϓखॱ
લఏ • ίʔυྔ͕૿͑ͯɺViewControllerʢҎԼVCʣ͕ϑΝοτɻ • ϓϩδΣΫτʹςετ͕ແ͍ɻ • ςετΛԿ͔Βॻ͍ͨΒ͍͍͔͔Βͳ͍ɻ
ςετΛॻ͘త ! ৭ʑ͋Γ·͕͢.. - ػೳΛຬ͍ͨͯ͠Δ͜ͱΛ֬ೝ͢Δ - όάΛൃݟ͢Δ - ճؼςετΛ༰қʹ͢Δ -
ίʔυΛςετՄೳͳγϯϓϧ͞ʹอͭ
Կ͔Βॻ͔͘ʁ • ViewControllerʁ • APIΛୟ͍͍ͯΔΫϥεʁ
FatͳVCɺAPIͷςετ͍͠ ҎԼཧ༝͔Β·ͩ׳Ε͍ͯͳ͍ॳ৺ऀʹΦεεϝͰ͖ͳ͍ • ঢ়ଶΛଟ࣋ͪ͘ґଘؔෳࡶ • ೖग़ྗ͕ෆ໌֬ • ϞοΫελϒΛར༻ͨ͠ςετ͕ඞཁ • ޭମݧΛಘʹ͍͘
Կ͔Βॻ͔͘ʁ • ࠷ཻͷখ͍͞ϞσϧΫϥε • ϢʔςΟϦςΟΫϥε
ԿނϢʔςΟϦςΟΫϥεʁ • ೖग़ྗ͕໌֬ • ґଘ͕ؔগͳ͍ • খ͘͞ޭΛॏͶΒΕΔ • ʢྫʣจࣈྻΛʮͻΒ͕ͳʯ͔ఆͯ͠true/falseΛฦؔ͢ ͳͲ
ͲͷΑ͏ʹςετ͢Δͷ͔ʁ • ϗϫΠτϘοΫεςετ • ϒϥοΫϘοΫεςετ ྆ऀΛ্ख͘Έ߹Θͤͯޮྑ͘ςετ͠·͢ɻ
ϗϫΠτϘοΫεςετ • ෦ߏʹ • ॲཧܦ࿏Λཏ͍ͯ͘͠ςετ • ཏʢΧόϨοδʣͰ࿙ΕΛݕग़Ͱ͖Δ • ༷ͦͷͷ͕ؒҧ͍ͬͯΔ͜ͱݕग़Ͱ͖ͳ͍
ϒϥοΫϘοΫεςετ • ෦ߏ͕Ͳ͏ͳ͍ͬͯΑ͏ͱؾʹ͠ͳ͍ • Ͳ͏͋Δ͖͔ʁͱ͍͏༷ʹ • ԿΛड͚औΓɺԿΛฦ͖͔͢ʁೖग़ྗΛςετ͢Δ
͋͞ॻ͍ͯΈΑ͏ ʮจࣈྻʯΛͻΒ͕ͳ͔ఆ͠true/falseΛฦؔ͢ͷςετ func testIsHiragana() { XCTAssertTrue("͋".isHiragana()) }
͋͞ॻ͍ͯΈΑ͏ ʮจࣈྻʯΛͻΒ͕ͳ͔ఆ͠true/falseΛฦؔ͢ͷςετ func testIsHiragana() { XCTAssertTrue("͊".isHiragana()) XCTAssertTrue("͋".isHiragana()) XCTAssertTrue("͌".isHiragana()) XCTAssertTrue("͍".isHiragana()) XCTAssertTrue("͎".isHiragana())
XCTAssertTrue("͏".isHiragana()) XCTAssertTrue("͐".isHiragana()) XCTAssertTrue("͑".isHiragana()) XCTAssertTrue("͒".isHiragana()) }
͋͞ॻ͍ͯΈΑ͏ ʮจࣈྻʯΛͻΒ͕ͳ͔ఆ͠true/falseΛฦؔ͢ͷςετ func testIsHiragana() { XCTAssertTrue("͊".isHiragana()) XCTAssertTrue("͋".isHiragana()) XCTAssertTrue("͌".isHiragana()) XCTAssertTrue("͍".isHiragana()) XCTAssertTrue("͎".isHiragana())
XCTAssertTrue("͏".isHiragana()) XCTAssertTrue("͐".isHiragana()) XCTAssertTrue("͑".isHiragana()) XCTAssertTrue("͒".isHiragana()) XCTAssertTrue("͓".isHiragana()) XCTAssertTrue("͔".isHiragana()) XCTAssertTrue("͕".isHiragana()) XCTAssertTrue("͖".isHiragana()) XCTAssertTrue("͗".isHiragana()) XCTAssertTrue("͘".isHiragana()) XCTAssertTrue("͙".isHiragana()) XCTAssertTrue("͚".isHiragana()) XCTAssertTrue("͛".isHiragana()) XCTAssertTrue("͜".isHiragana()) XCTAssertTrue("͝".isHiragana()) XCTAssertTrue("͞".isHiragana()) XCTAssertTrue("͟".isHiragana()) XCTAssertTrue("͠".isHiragana()) XCTAssertTrue("͡".isHiragana()) XCTAssertTrue("͢".isHiragana()) XCTAssertTrue("ͣ".isHiragana()) XCTAssertTrue("ͤ".isHiragana()) XCTAssertTrue("ͥ".isHiragana()) XCTAssertTrue("ͦ".isHiragana()) XCTAssertTrue("ͧ".isHiragana()) XCTAssertTrue("ͨ".isHiragana()) }
͋͞ॻ͍ͯΈΑ͏ ʮจࣈྻʯΛͻΒ͕ͳ͔ఆ͠true/falseΛฦؔ͢ͷςετ func testIsHiragana() { XCTAssertTrue("͊".isHiragana()) XCTAssertTrue("͋".isHiragana()) XCTAssertTrue("͌".isHiragana()) XCTAssertTrue("͍".isHiragana()) XCTAssertTrue("͎".isHiragana())
XCTAssertTrue("͏".isHiragana()) XCTAssertTrue("͐".isHiragana()) XCTAssertTrue("͑".isHiragana()) XCTAssertTrue("͒".isHiragana()) XCTAssertTrue("͓".isHiragana()) XCTAssertTrue("͔".isHiragana()) XCTAssertTrue("͕".isHiragana()) XCTAssertTrue("͖".isHiragana()) XCTAssertTrue("͗".isHiragana()) XCTAssertTrue("͘".isHiragana()) XCTAssertTrue("͙".isHiragana()) XCTAssertTrue("͚".isHiragana()) XCTAssertTrue("͛".isHiragana()) XCTAssertTrue("͜".isHiragana()) XCTAssertTrue("͝".isHiragana()) XCTAssertTrue("͞".isHiragana()) XCTAssertTrue("͟".isHiragana()) XCTAssertTrue("͠".isHiragana()) XCTAssertTrue("͡".isHiragana()) XCTAssertTrue("͢".isHiragana()) XCTAssertTrue("ͣ".isHiragana()) XCTAssertTrue("ͤ".isHiragana()) XCTAssertTrue("ͥ".isHiragana()) XCTAssertTrue("ͦ".isHiragana()) XCTAssertTrue("ͧ".isHiragana()) XCTAssertTrue("ͨ".isHiragana()) XCTAssertTrue("ͩ".isHiragana()) XCTAssertTrue("ͪ".isHiragana()) XCTAssertTrue("ͫ".isHiragana()) XCTAssertTrue("ͬ".isHiragana()) XCTAssertTrue("ͭ".isHiragana()) XCTAssertTrue("ͮ".isHiragana()) XCTAssertTrue("ͯ".isHiragana()) XCTAssertTrue("Ͱ".isHiragana()) XCTAssertTrue("ͱ".isHiragana()) XCTAssertTrue("Ͳ".isHiragana()) XCTAssertTrue("ͳ".isHiragana()) XCTAssertTrue("ʹ".isHiragana()) XCTAssertTrue("͵".isHiragana()) XCTAssertTrue("Ͷ".isHiragana()) XCTAssertTrue("ͷ".isHiragana()) XCTAssertTrue("".isHiragana()) XCTAssertTrue("".isHiragana()) XCTAssertTrue("ͺ".isHiragana()) XCTAssertTrue("ͻ".isHiragana()) XCTAssertTrue("ͼ".isHiragana()) XCTAssertTrue("ͽ".isHiragana()) XCTAssertTrue(";".isHiragana()) XCTAssertTrue("Ϳ".isHiragana()) XCTAssertTrue("".isHiragana()) XCTAssertTrue("".isHiragana()) XCTAssertTrue("".isHiragana()) XCTAssertTrue("".isHiragana()) XCTAssertTrue("΄".isHiragana()) XCTAssertTrue("΅".isHiragana()) XCTAssertTrue("Ά".isHiragana()) XCTAssertTrue("·".isHiragana()) XCTAssertTrue("Έ".isHiragana()) XCTAssertTrue("Ή".isHiragana()) XCTAssertTrue("Ί".isHiragana()) XCTAssertTrue("".isHiragana()) XCTAssertTrue("Ό".isHiragana()) XCTAssertTrue("".isHiragana()) XCTAssertTrue("Ύ".isHiragana()) XCTAssertTrue("Ώ".isHiragana()) XCTAssertTrue("ΐ".isHiragana()) XCTAssertTrue("Α".isHiragana()) XCTAssertTrue("Β".isHiragana()) XCTAssertTrue("Γ".isHiragana()) XCTAssertTrue("Δ".isHiragana()) XCTAssertTrue("Ε".isHiragana()) XCTAssertTrue("Ζ".isHiragana()) XCTAssertTrue("Η".isHiragana()) XCTAssertTrue("Θ".isHiragana()) XCTAssertTrue("Ι".isHiragana()) XCTAssertTrue("Κ".isHiragana()) XCTAssertTrue("Λ".isHiragana()) XCTAssertTrue("Μ".isHiragana()) XCTAssertTrue("".isHiragana()) XCTAssertTrue("".isHiragana()) XCTAssertTrue("Ἐ".isHiragana()) }
ࢮʹ·͢Ͷ! શͯͷΛςετ͢Δࣄඇݱ࣮తɻ ͦͦ100%όά͕ແ͍͜ͱอূͰ͖ͳ͍ɻ func testIsHiragana() { XCTAssertTrue("͊".isHiragana()) XCTAssertTrue("͋".isHiragana()) XCTAssertTrue("͌".isHiragana()) XCTAssertTrue("͍".isHiragana())
XCTAssertTrue("͎".isHiragana()) XCTAssertTrue("͏".isHiragana()) XCTAssertTrue("͐".isHiragana()) XCTAssertTrue("͑".isHiragana()) XCTAssertTrue("͒".isHiragana()) XCTAssertTrue("͓".isHiragana()) XCTAssertTrue("͔".isHiragana()) XCTAssertTrue("͕".isHiragana()) XCTAssertTrue("͖".isHiragana()) XCTAssertTrue("͗".isHiragana()) XCTAssertTrue("͘".isHiragana()) XCTAssertTrue("͙".isHiragana()) XCTAssertTrue("͚".isHiragana()) XCTAssertTrue("͛".isHiragana()) XCTAssertTrue("͜".isHiragana()) XCTAssertTrue("͝".isHiragana()) XCTAssertTrue("͞".isHiragana()) XCTAssertTrue("͟".isHiragana()) XCTAssertTrue("͠".isHiragana()) XCTAssertTrue("͡".isHiragana()) XCTAssertTrue("͢".isHiragana()) XCTAssertTrue("ͣ".isHiragana()) XCTAssertTrue("ͤ".isHiragana()) XCTAssertTrue("ͥ".isHiragana()) XCTAssertTrue("ͦ".isHiragana()) XCTAssertTrue("ͧ".isHiragana()) XCTAssertTrue("ͨ".isHiragana()) XCTAssertTrue("ͩ".isHiragana()) XCTAssertTrue("ͪ".isHiragana()) XCTAssertTrue("ͫ".isHiragana()) XCTAssertTrue("ͬ".isHiragana()) XCTAssertTrue("ͭ".isHiragana()) XCTAssertTrue("ͮ".isHiragana()) XCTAssertTrue("ͯ".isHiragana()) XCTAssertTrue("Ͱ".isHiragana()) XCTAssertTrue("ͱ".isHiragana()) XCTAssertTrue("Ͳ".isHiragana()) XCTAssertTrue("ͳ".isHiragana()) XCTAssertTrue("ʹ".isHiragana()) XCTAssertTrue("͵".isHiragana()) XCTAssertTrue("Ͷ".isHiragana()) XCTAssertTrue("ͷ".isHiragana()) XCTAssertTrue("".isHiragana()) XCTAssertTrue("".isHiragana()) XCTAssertTrue("ͺ".isHiragana()) XCTAssertTrue("ͻ".isHiragana()) XCTAssertTrue("ͼ".isHiragana()) XCTAssertTrue("ͽ".isHiragana()) XCTAssertTrue(";".isHiragana()) XCTAssertTrue("Ϳ".isHiragana()) XCTAssertTrue("".isHiragana()) XCTAssertTrue("".isHiragana()) XCTAssertTrue("".isHiragana()) XCTAssertTrue("".isHiragana()) XCTAssertTrue("΄".isHiragana()) XCTAssertTrue("΅".isHiragana()) XCTAssertTrue("Ά".isHiragana()) XCTAssertTrue("·".isHiragana()) XCTAssertTrue("Έ".isHiragana()) XCTAssertTrue("Ή".isHiragana()) XCTAssertTrue("Ί".isHiragana()) XCTAssertTrue("".isHiragana()) XCTAssertTrue("Ό".isHiragana()) XCTAssertTrue("".isHiragana()) XCTAssertTrue("Ύ".isHiragana()) XCTAssertTrue("Ώ".isHiragana()) XCTAssertTrue("ΐ".isHiragana()) XCTAssertTrue("Α".isHiragana()) XCTAssertTrue("Β".isHiragana()) XCTAssertTrue("Γ".isHiragana()) XCTAssertTrue("Δ".isHiragana()) XCTAssertTrue("Ε".isHiragana()) XCTAssertTrue("Ζ".isHiragana()) XCTAssertTrue("Η".isHiragana()) XCTAssertTrue("Θ".isHiragana()) XCTAssertTrue("Ι".isHiragana()) XCTAssertTrue("Κ".isHiragana()) XCTAssertTrue("Λ".isHiragana()) XCTAssertTrue("Μ".isHiragana()) XCTAssertTrue("".isHiragana()) XCTAssertTrue("".isHiragana()) XCTAssertTrue("Ἐ".isHiragana()) }
ޮՌతʹςετΛॻ͘ʹ ! 1. ಉׂ 2. ڥքੳ 3. Τϥʔਪଌ
ಉׂ • ೖྗΛ͍͔ͭ͘ͷάϧʔϓʹ͚ΔʢಉΫϥεʣ • ಉΫϥε͔Βද1ͭΛςετσʔλͱͯ͠બ • ແޮͳ͏ͷͰΤϥʔॲཧͷςετ͕Մೳ
ڥքੳ • ಉׂͨ͠άϧʔϓͷͷ2͕ͭςετσʔλ • ڥքʹόά͕ूத͢Δͱ͍͏ܦݧଇʹجͮ͘ • ಉׂͱซ༻͞ΕΔ
Τϥʔਪଌ ςετରͱͯ͠༩͑ΒΕͨιϑτΣΞʹ͓͍ͯى͜Γͦ͏ͳ όάΛਪଌͯ͠ɺͦΕΛݕग़͢ΔςετέʔεΛઃܭ͢Δ͜ͱɻܦ ݧϕʔεͷςετٕ๏ʹྨ͞ΕΔɻ — ใϚωδϝϯτ༻ޠࣙయɿΤϥʔਪଌ
Τϥʔਪଌ ۩ମతʹʁ • 0ΛೖΕΔ • nullΛೖΕΔ • ۭσʔλ • ͏Δ͏
༏ઌॱҐʁ όάΛຒΊࠐΈ͍͢ڥք͕࠷ߴ͍ ڥք ʼ Τϥʔਪଌ ʼಉΫϥεͷද ͜ͷॱ൪ʹςετέʔεΛॻ͘ͱޮՌతɻ ϓϩδΣΫτنʹΑΓɺಉΫϥεͷදΛলུ͢Δ͜ͱ ͋Γ͏Δɻ
मਖ਼൛ func testIsHiragana() { //༗ޮڥք XCTAssertTrue("\u{3041}".isHiragana()) XCTAssertTrue("\u{3096}".isHiragana()) //ແޮڥք XCTAssertFalse("\u{3040}".isHiragana()) XCTAssertFalse("\u{3097}".isHiragana())
//༗ޮಉΫϥεͷද XCTAssertTrue("͍͋͏͓͑".isHiragana()) //Τϥʔਪଌ XCTAssertFalse("".isHiragana()) }
·ͱΊ • ϢʔςΟϦςΟΫϥεͰܦݧΛੵΉ • গ͠ͰςετͷίετΛԼ͛ͯश׳ʹ͢Δ͜ͱ͕େࣄ • ڥք ʼ Τϥʔਪଌ ʼಉΫϥεͷද
• ͦͯ͠ViewControllerͷςετ..