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
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
Ghostty + Neovimで作る 透明でカッコ良い開発環境
j341nono
0
160
複雑なUIコンポーネントとの ⻑い付き合い⽅:波及するバグからテスト戦略を経て、安全な再設計へ
mixplace
0
260
ジョジョの世界をXRで再現する
mofurune
0
140
個人開発者よ、Honoを使え(おじさんver)
tanahiro2010
2
150
プロダクトコードからライブラリの境界を見つける
elmetal
PRO
0
110
そのリトライ、死んだコネクションを使い回していませんか ── GoのHTTPクライアントとHTTP/2を実プロダクト障害から学び直す
myus4a
1
410
Streamlitで実現する自然言語データアプリ開発
ayumu_yamaguchi
1
350
動作中のプログラムの中身をリアルタイムに覗く / Realtime Debugger for CSharp with Roslyn
prota
1
1.8k
コードで差別化できない時代の ソフトウェアエンジニアリング / Software Engineering in an Era Where Code Doesn’t Differentiate
kishida
2
130
ソニーのクラウド共通基盤の変遷とAI時代の開発スタイルに合わせた進化 / The Journey of Sony’s Common Cloud Platform and Its Evolution for AI-Native Development
kenjiyoneyama
0
240
JAWS-UG 東京支部が始める、JAWS-UG支部コラボ / JAWS-UG lunchtime LT Collaboration
y0hgi
0
210
AIに “答え“を書かせるのを やめてみた
___akari11
0
110
Featured
See All Featured
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
490
How to Think Like a Performance Engineer
csswizardry
28
2.9k
Six Lessons from altMBA
skipperchong
29
4.5k
Odyssey Design
rkendrick25
PRO
2
860
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
2
400
A better future with KSS
kneath
240
18k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
350
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
1k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
300
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.7k
How to Ace a Technical Interview
jacobian
280
24k
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.