Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Swift で ParameterizedTest をやってみた話/swift-parame...
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Yusuke Hosonuma
April 16, 2019
Programming
2.3k
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Swift で ParameterizedTest をやってみた話/swift-parameterized-test
iOS Test Night #10 での発表
https://testnight.connpass.com/event/119381/
Yusuke Hosonuma
April 16, 2019
More Decks by Yusuke Hosonuma
See All by Yusuke Hosonuma
KotlinTest で始める Property-based Testing/kotlintest-property-based-testing
yusukehosonuma
2
1.6k
Marzipan の正体は何だったのか そして SwiftUI の衝撃/wwdc19_marzipan_swiftui
yusukehosonuma
2
990
標準パッケージにおけるテストでの利用例から学ぶ testing / quick パッケージ/golang-testing-quick
yusukehosonuma
4
12k
Property-based test beginning with SwiftCheck
yusukehosonuma
1
6.3k
XCTest(再)入門/reintroduction-to-xctest
yusukehosonuma
0
670
ソースコードから読み解く - Quick はどのように実装されているのか?/quick-code-reading
yusukehosonuma
7
11k
Swift 4.2 はどのような進化をしているのか/whats-new-swift42
yusukehosonuma
16
15k
HTTPモックライブラリ「Mockingjay」を使ってみた話/swift-mockingjay
yusukehosonuma
5
4.4k
SwiftにおけるMockライブラリの活用/swift-mock-library
yusukehosonuma
10
6.7k
Other Decks in Programming
See All in Programming
Simple Storage Service(S3) is not simple
iwatsukayura
0
270
contenteditable と日本語入力に向き合う
colorful12
0
190
機械に任せるテスト、人が見るテスト ⽣成AIで引き直した、運⽤保守フェーズの線引き
dske104
0
180
難しいけど、読めた。- OSSの入口に立った話。
sts11142
0
150
Agents on Rails - Rails at Scale 2026
irinanazarova
0
530
速習iPhone Duo対応
yuukiw00w
2
980
Event is what happens
moro
1
290
自サークルのIdPからログアウトできるようになるまで
taiseiue
1
130
全ての永続トークンを、生まれる前に消し去りたい!
sylph01
1
310
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
590
Verilogで学ぶCPU自作入門
uyuki234
8
4.1k
Are APIs Still Relevant in the AI Era?
soyuka
0
460
Featured
See All Featured
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
33
5.2k
Skip the Path - Find Your Career Trail
mkilby
1
250
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
620
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
260
Fireside Chat
paigeccino
43
4.1k
Amusing Abliteration
ianozsvald
1
340
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
930
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
1
280
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
630
Transcript
Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 4XJGUͰ1BSBNFUFSJ[FE5FTU ΛͬͯΈͨ 1
iOS Test Night #10 2019/4/16ʢTueʣ ࡉপ ༞հ@DeNA
"CPVU 2 Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
:VTVLF)PTPOVNB • 48&5άϧʔϓ ⁃ ςετࣗಈԽɹJ04(P • 'BWPSJUF ⁃ •
ۙگ ⁃ USZ4XJGU50,:0Ͱొஃ ⁃ വؗʹཱྀߦʹߦ͖ͬͯͨʂ Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 3 @tobi462ʢτϏʣ SwiftCheckͰ࢝ΊΔ Property-based Testing
ࠓ͢͜ͱ 4 Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
4XJGUͰ 1BSBNFUFSJ[FEUFTU ΛͬͯΈͨ 5 Copyright (C) DeNA Co.,Ltd. All Rights
Reserved.
1BSBNFUFSJ[FEUFTUʁ 6 Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
7 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Parameterized-Test •
ࣄલʹςετσʔλΛྻڍ͢Δॻ͖ํ • ςετσʔλͷՃɾআ͕͍͢͠ͱ͍͏ར • +6OJUͰඪ४Ͱαϙʔτ • (PݴޠͰҰൠతͳॻ͖ํ • ςʔϒϧۦಈςετͱݺΕͨΓ
9$5FTUͰະαϙʔτ 8 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ͪΖΜ
ͰࣗͰॻ͚Δͣʂ 9 Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
'J[[#V[[ͷςετ Λॻ͍ͯΈΔ͜ͱʹ͢Δͧʂ 10 Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
11 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. XCTest Ͱ
Parameterized Test class ParamTests: XCTestCase { func testParams() { let tests: [(args: Int, expect: String)] = [ (1, "1"), (2, "2"), (3, "Fizz"), (4, "4"), (5, "Buzz"), (6, "6"), ] for (args, expect) in tests { let result = fizzBuzz(args) XCTAssertEqual(expect, result) } } }
12 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. XCTest Ͱ
Parameterized Test class ParamTests: XCTestCase { func testParams() { let tests: [(args: Int, expect: String)] = [ (1, "1"), (2, "2"), (3, "Fizz"), (4, "4"), (5, "Buzz"), (6, "6"), ] for (args, expect) in tests { let result = fizzBuzz(args) XCTAssertEqual(expect, result) } } } ೖྗͱظͷλϓϧ
13 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. XCTest Ͱ
Parameterized Test class ParamTests: XCTestCase { func testParams() { let tests: [(args: Int, expect: String)] = [ (1, "1"), (2, "2"), (3, "Fizz"), (4, "4"), (5, "Buzz"), (6, "6"), ] for (args, expect) in tests { let result = fizzBuzz(args) XCTAssertEqual(expect, result) } } } ྻͰςετσʔλΛ༻ҙ
14 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. XCTest Ͱ
Parameterized Test class ParamTests: XCTestCase { func testParams() { let tests: [(args: Int, expect: String)] = [ (1, "1"), (2, "2"), (3, "Fizz"), (4, "4"), (5, "Buzz"), (6, "6"), ] for (args, expect) in tests { let result = fizzBuzz(args) XCTAssertEqual(expect, result) } } } ϧʔϓͰॱ൪ʹݕূ
15 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. XCTest Ͱ
Parameterized Test class ParamTests: XCTestCase { func testParams() { let tests: [(args: Int, expect: String)] = [ (1, "1"), (2, "2"), (3, "Fizz"), (4, "4"), (5, "Buzz"), (6, "6"), ] for (args, expect) in tests { let result = fizzBuzz(args) XCTAssertEqual(expect, result) } } }
16 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. XCTest Ͱ
Parameterized Test class ParamTests: XCTestCase { func testParams() { let tests: [(args: Int, expect: String)] = [ (1, "1"), (2, "2"), (3, "Fizz"), (4, "4"), (5, "Buzz"), (6, "6"), ] for (args, expect) in tests { let result = fizzBuzz(args) XCTAssertEqual(expect, result) } } } ςετσʔλՃɾআָ͕ͩ͠ɺ ݟ௨͠Α͍ؾ͕͢Δʂ
ςετ͕ࣦഊͨ࣌͠ 17 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ͔͠͠
18 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ςετ͕ࣦഊͨ࣌͠
19 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ςετ͕ࣦഊͨ࣌͠ Τϥʔ͕ू͞Εͯ͠·͏
20 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ςετ͕ࣦഊͨ࣌͠ ཧΛݴ͑ɺ͜ͷߦʹग़ͯཉ͍͠
9$5FTUͰ ΤϥʔදࣔͷҐஔࢦఆͰ͖Δ 21 Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
࣮
22 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ಠࣗͷΞαʔγϣϯ func
assertEmpty(_ s: String, file: StaticString = #file, line: UInt = #line) { XCTAssert(s.isEmpty, file: file, line: line) } class AssertTests: XCTestCase { func testEmpty() { assertEmpty("Swift") } }
23 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ಠࣗͷΞαʔγϣϯ func
assertEmpty(_ s: String, file: StaticString = #file, line: UInt = #line) { XCTAssert(s.isEmpty, file: file, line: line) } class AssertTests: XCTestCase { func testEmpty() { assertEmpty("Swift") } } ۭจࣈྻͰ͋Δ͜ͱΛݕূ
24 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ಠࣗͷΞαʔγϣϯ func
assertEmpty(_ s: String, file: StaticString = #file, line: UInt = #line) { XCTAssert(s.isEmpty, file: file, line: line) } class AssertTests: XCTestCase { func testEmpty() { assertEmpty("Swift") } } ݺͼग़͠ݩͷϑΝΠϧɾߦΛऔಘ
25 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ಠࣗͷΞαʔγϣϯ func
assertEmpty(_ s: String, file: StaticString = #file, line: UInt = #line) { XCTAssert(s.isEmpty, file: file, line: line) } class AssertTests: XCTestCase { func testEmpty() { assertEmpty("Swift") } } ҾͰ͢
26 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ಠࣗͷΞαʔγϣϯ func
assertEmpty(_ s: String, file: StaticString = #file, line: UInt = #line) { XCTAssert(s.isEmpty, file: file, line: line) } class AssertTests: XCTestCase { func testEmpty() { assertEmpty("Swift") } } ࣦഊ͢ΔσʔλͰ࣮ߦ͢Δͱɻɻ
27 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ಠࣗͷΞαʔγϣϯ ݺͼग़͠ݩʹΤϥʔදࣔ͞Εͨʂ
28 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ಠࣗͷΞαʔγϣϯ ݺͼग़͠ݩʹΤϥʔදࣔ͞Εͨʂ
͜ΕͰվળͰ͖ͦ͏ͩͧʂ
1BSBNFUFSJ[FE5FTU Λվળͯ͠ΈΔ 29 Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
30 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. վળ൛ Parameterized
Test class ParamTests: XCTestCase { func testParams() { let tests: [(line: UInt, args: Int, expect: String)] = [ (#line, 1, "1"), (#line, 2, "2"), (#line, 3, "Fizz"), (#line, 4, "4"), (#line, 5, "Buzz"), (#line, 6, "6"), ] for (line, args, expect) in tests { let result = fizzBuzz(args) XCTAssertEqual(expect, result, line: line) } } }
31 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. վળ൛ Parameterized
Test class ParamTests: XCTestCase { func testParams() { let tests: [(line: UInt, args: Int, expect: String)] = [ (#line, 1, "1"), (#line, 2, "2"), (#line, 3, "Fizz"), (#line, 4, "4"), (#line, 5, "Buzz"), (#line, 6, "6"), ] for (line, args, expect) in tests { let result = fizzBuzz(args) XCTAssertEqual(expect, result, line: line) } } } ֤λϓϧʹMJOFΛՃͯ͠
32 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. վળ൛ Parameterized
Test class ParamTests: XCTestCase { func testParams() { let tests: [(line: UInt, args: Int, expect: String)] = [ (#line, 1, "1"), (#line, 2, "2"), (#line, 3, "Fizz"), (#line, 4, "4"), (#line, 5, "Buzz"), (#line, 6, "6"), ] for (line, args, expect) in tests { let result = fizzBuzz(args) XCTAssertEqual(expect, result, line: line) } } } "TTFSUJPOؔʹ͢
33 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. վળ൛ Parameterized
Test
34 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. վળ൛ Parameterized
Test ࣦഊͨ͠Ґஔ͕͔Γ͍͢ʂ ͜Ε͕ސ٬ͷٻΊ͍ͯͨͷ
MJOF͢Βॻ͖ͨ͘ͳ͍ 35 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ސ٬
MJOF͢Βॻ͖ͨ͘ͳ͍ 36 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ސ٬
OSS Խɺܾఆʂ
37 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ͷߟ͑ͨ࠷ڧͷ Parameterized
Test class ParamTests: XCTestCase { func testFizzBuzz() { assert(fizzBuzz).forAll([ when(1, then: "1"), when(2, then: "2"), when(3, then: "Fizz"), when(4, then: "4"), when(5, then: "Buzz"), when(6, then: "6"), ]) } }
38 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ͷߟ͑ͨ࠷ڧͷ Parameterized
Test class ParamTests: XCTestCase { func testFizzBuzz() { assert(fizzBuzz).forAll([ when(1, then: "1"), when(2, then: "2"), when(3, then: "Fizz"), when(4, then: "4"), when(5, then: "Buzz"), when(6, then: "6"), ]) } } ݕূରͷؔΛࢦఆͯ͠
39 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ͷߟ͑ͨ࠷ڧͷ Parameterized
Test class ParamTests: XCTestCase { func testFizzBuzz() { assert(fizzBuzz).forAll([ when(1, then: "1"), when(2, then: "2"), when(3, then: "Fizz"), when(4, then: "4"), when(5, then: "Buzz"), when(6, then: "6"), ]) } } ݕূ͢ΔೖྗɾظΛྻڍ
40 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ͷߟ͑ͨ࠷ڧͷ Parameterized
Test
41 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ͷߟ͑ͨ࠷ڧͷ Parameterized
Test https://github.com/ YusukeHosonuma/SwiftParamTest ɺผʹελʔ͕ཉ͍͠Θ͚͡Ό ͳ͍Μ͔ͩΒͶ///
·ͱΊ 42 Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
43 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ·ͱΊ •
1BSBNFUFSJ[FE5FTUσʔλΛྻڍ͢ΔΑ͏ͳ ςετίʔυͷॻ͖ํ • 9$5FTU4XJGUͰॻ͚Δ • 9$5"TTFSUܥΤϥʔҐஔΛ੍ޚͰ͖Δ • Α͔ͬͨΒ044ͬͯΈͯͶʂ ΞΠσΟΞͱ͔ืूʂɹ5XJUUFS!UPCJ
1BSBNFUFSJ[FEUFTU CFHJOOJOHXJUI 4XJGU1BSBN5FTU 44 Copyright (C) DeNA Co.,Ltd. All Rights
Reserved.