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
0
200
How to write basic unittests
基本的なユニットテストの書き方について、ユーティリティクラスを例に説明します。
tanako
March 26, 2017
Tweet
Share
More Decks by tanako
See All by tanako
タイミーiOSアプリへの Swift Concurrency 導入までの軌跡
_tanako
4
2k
SwiftPM Integration into Xcode
_tanako
0
150
roppongiswift6.pdf
_tanako
1
400
iOSエンジニアの為のgrpc-swift入門
_tanako
6
4.8k
grpc-swiftの紹介
_tanako
0
1.8k
Other Decks in Technology
See All in Technology
Pure Goで体験するWasmの未来
askua
1
150
Goを使ってTDDを体験しよう!
chiroruxx
1
230
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
11
77k
Optuna DashboardにおけるPLaMo2連携機能の紹介 / PFN LLM セミナー
pfn
PRO
1
620
Goに育てられ開発者向けセキュリティ事業を立ち上げた僕が今向き合う、AI × セキュリティの最前線 / Go Conference 2025
flatt_security
0
260
What is BigQuery?
aizack_harks
0
120
WebアプリケーションのUI構築で気を付けてるポイント
tomokusaba
0
150
C# 14 / .NET 10 の新機能 (RC 1 時点)
nenonaninu
1
1.1k
いまさら聞けない ABテスト入門
skmr2348
0
170
Deep Research と NotebookLM を使い倒す!レガシーリプレイスの技術選定と学習コスト削減術
tet0h
0
2.8k
Streamlit は社内ツールだけじゃない!PoC の速さで実現する'商用品質'の分析 SaaS アーキテクチャ
kdash
2
1k
バイブコーディングと継続的デプロイメント
nwiizo
2
340
Featured
See All Featured
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.2k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.7k
Designing for Performance
lara
610
69k
Scaling GitHub
holman
463
140k
Practical Orchestrator
shlominoach
190
11k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1.2k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
127
53k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
Facilitating Awesome Meetings
lara
56
6.6k
Building Applications with DynamoDB
mza
96
6.6k
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ͷςετ..