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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
tanako
March 26, 2017
Technology
0
230
How to write basic unittests
基本的なユニットテストの書き方について、ユーティリティクラスを例に説明します。
tanako
March 26, 2017
Tweet
Share
More Decks by tanako
See All by tanako
タイミーiOSアプリへの Swift Concurrency 導入までの軌跡
_tanako
4
2.1k
SwiftPM Integration into Xcode
_tanako
0
170
roppongiswift6.pdf
_tanako
1
420
iOSエンジニアの為のgrpc-swift入門
_tanako
6
5k
grpc-swiftの紹介
_tanako
0
1.8k
Other Decks in Technology
See All in Technology
生成AI活用によるPRレビュー改善の歩み
lycorptech_jp
PRO
5
2k
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
6
71k
【PyCon mini Shizuoka 2026】生成AI時代に画像処理やオーディオ処理のノードエディターを作る理由
kazuhitotakahashi
0
270
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
1.1k
作るべきものと向き合う - ecspresso 8年間の開発史から学ぶ技術選定 / 技術選定con findy 2026
fujiwara3
7
2k
Datadog Cloud Cost Management で実現するFinOps
taiponrock
PRO
0
130
AI時代にエンジニアはどう成長すれば良いのか?
recruitengineers
PRO
1
110
LY Tableauでの Tableau x AIの実践 (at Tableau Now! - 2026-02-26)
yoshitakaarakawa
0
1.2k
Agentic Codingの実践とチームで導入するための工夫
lycorptech_jp
PRO
0
390
Snowflake Night #2 LT
taromatsui_cccmkhd
0
320
Data Hubグループ 紹介資料
sansan33
PRO
0
2.8k
競争優位を生み出す戦略的内製開発の実践技法
masuda220
PRO
2
530
Featured
See All Featured
Designing Powerful Visuals for Engaging Learning
tmiket
0
260
Designing for humans not robots
tammielis
254
26k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
73
Music & Morning Musume
bryan
47
7.1k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Designing for Performance
lara
611
70k
Optimizing for Happiness
mojombo
378
71k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
Thoughts on Productivity
jonyablonski
75
5.1k
Paper Plane
katiecoart
PRO
0
47k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.8k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
460
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ͷςετ..