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
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
660
ソースコードから読み解く - Quick はどのように実装されているのか?/quick-code-reading
yusukehosonuma
7
11k
Swift 4.2 はどのような進化をしているのか/whats-new-swift42
yusukehosonuma
16
15k
HTTPモックライブラリ「Mockingjay」を使ってみた話/swift-mockingjay
yusukehosonuma
5
4.3k
SwiftにおけるMockライブラリの活用/swift-mock-library
yusukehosonuma
10
6.6k
Other Decks in Programming
See All in Programming
170k Jobs a Day on GKE: Scaling Mercari's CI Platform - and What's Next for AI-Native Development
junyaokabe
0
110
変わらないものが、変わるものを決める — 意図駆動開発 × イベントソーシング × イミュータブル | What Doesn't Change Decides What Can — IDD × Event Sourcing × Immutability
tomohisa
0
1.8k
自動化したのに回らないテスト運用の壁ーAI時代の品質責任と生産性
mfunaki
1
130
テーブルをDELETEした
yuzneri
0
140
PHP に部分適用が来るぞ!……ところで何それ?おいしいの? #phpcon / phpcon-2026
shogogg
0
660
AI時代のPHPer生存戦略 ~「言語、もうなんでもよくない?」に本気で向き合う~
vivion
0
540
これって Effect でできたのでは? / TSKaigi Mashup Kansai #2
susisu
0
240
php-fpmのプロセスが枯渇した日-調査・対処・そして本当にやるべきだったこと-
shibuchaaaan
0
290
Laravelで学ぶ Webアプリケーションチューニング入門/web_application_tuning_101
hanhan1978
4
1.8k
源内ハンズオン概要編
hideg
0
190
ソフトウェア設計に溶けるインフラ ― AWS CDK のインフラ認識論
konokenj
3
790
関東Kaggler会_NVIDIA_Nemotron_コンペ_振り返り
rick_ds
0
600
Featured
See All Featured
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
240
Mind Mapping
helmedeiros
PRO
1
310
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
580
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
700
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
610
Google's AI Overviews - The New Search
badams
0
1.1k
Statistics for Hackers
jakevdp
799
230k
Making Projects Easy
brettharned
120
6.7k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
530
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
280
HDC tutorial
michielstock
2
790
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
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.