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
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
1k
標準パッケージにおけるテストでの利用例から学ぶ 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
선언형 햅틱 라이브러리 진동을 소개합니다
l2hyunwoo
1
280
ChromeでローカルLLM
ryu1013
0
190
當我們開始不讀 Code - AI Agent 時代,Code Review 與 Clean Code 還剩下什麼?
jame2408
1
360
動画プレイヤーはなぜカクつくのか 〜Flutterのレンダリングとネイティブの境界を解剖する〜
naruogram
0
320
Snowflake Openflow Connector利用の勘所 / 20261024developersio2026tokyo-snowflake-openflow
kasacchiful
PRO
0
280
Web Framework Benchmark Battle 2026, Any%
a_matsuda
3
3.1k
조합이폭발하는디자인시스템이걸눈으로도테스트하라고요
giljongyu
0
710
ActionController meets Protocol Buffers
sorah
1
780
Seven New Principles of Software Engineering
yegor256
0
440
Railsのためのパスキー実践入門 〜マルチテナントSaaSでの意思決定〜
utakaha
4
3k
Performance Optimization With LLMs
xleitix
0
240
Railsバージョンを4倍にした話
optim
0
920
Featured
See All Featured
The Mindset for Success: Future Career Progression
greggifford
PRO
0
560
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
290
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
4
4.4k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.4k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.9k
Paper Plane
katiecoart
PRO
5
54k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
2
390
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
23k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
500
Rails Girls Zürich Keynote
gr2m
96
14k
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.