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.7k
Other Decks in Technology
See All in Technology
LLMをツールからプラットフォームへ〜Ai Workforceの戦略〜 #BetAIDay
layerx
PRO
1
1k
AI時代の大規模データ活用とセキュリティ戦略
ken5scal
0
150
Bet "Bet AI" - Accelerating Our AI Journey #BetAIDay
layerx
PRO
4
1.8k
いかにして命令の入れ替わりについて心配するのをやめ、メモリモデルを愛するようになったか(改)
nullpo_head
7
2.6k
마라톤 끝의 단거리 스퍼트: 2025년의 AI
inureyes
PRO
1
760
AI時代の経営、Bet AI Vision #BetAIDay
layerx
PRO
2
2.1k
意志の力が9割。アニメから学ぶAI時代のこれから。
endohizumi
1
100
生成AI導入の効果を最大化する データ活用戦略
ham0215
0
160
はじめての転職講座/The Guide of First Career Change
kwappa
5
4.2k
Kiro と Q Dev で 同じゲームを作らせてみた
r3_yamauchi
PRO
1
100
AIに目を奪われすぎて、周りの困っている人間が見えなくなっていませんか?
cap120
1
660
結局QUICで通信は速くなるの?
kota_yata
8
7.3k
Featured
See All Featured
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
36
2.5k
The Pragmatic Product Professional
lauravandoore
36
6.8k
Building an army of robots
kneath
306
45k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
The Invisible Side of Design
smashingmag
301
51k
[RailsConf 2023] Rails as a piece of cake
palkan
56
5.8k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
60k
Optimizing for Happiness
mojombo
379
70k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
6k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
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ͷςετ..