Slide 1

Slide 1 text

Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 4XJGUͰ1BSBNFUFSJ[FE5FTU Λ΍ͬͯΈͨ࿩ 1 iOS Test Night #10 2019/4/16ʢTueʣ 
 ࡉপ ༞հ@DeNA

Slide 2

Slide 2 text

"CPVU 2 Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

Slide 3

Slide 3 text

:VTVLF)PTPOVNB • 48&5άϧʔϓ ⁃ ςετࣗಈԽɹJ04(P • 'BWPSJUF ⁃ • ۙگ ⁃ USZ4XJGU50,:0Ͱొஃ ⁃ വؗʹཱྀߦʹߦ͖ͬͯͨʂ Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 3 @tobi462ʢτϏʣ SwiftCheckͰ࢝ΊΔ Property-based Testing

Slide 4

Slide 4 text

ࠓ೔࿩͢͜ͱ 4 Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

Slide 5

Slide 5 text

4XJGUͰ 1BSBNFUFSJ[FEUFTU Λ΍ͬͯΈͨ࿩ 5 Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

Slide 6

Slide 6 text

1BSBNFUFSJ[FEUFTUʁ 6 Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

Slide 7

Slide 7 text

7 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Parameterized-Test • ࣄલʹςετσʔλΛྻڍ͢Δॻ͖ํ • ςετσʔλͷ௥Ճɾ࡟আ͕͠΍͍͢ͱ͍͏ར఺ • +6OJUͰ͸ඪ४Ͱαϙʔτ • (PݴޠͰ͸Ұൠతͳॻ͖ํ • ςʔϒϧۦಈςετͱݺ͹ΕͨΓ

Slide 8

Slide 8 text

9$5FTUͰ͸ະαϙʔτ 8 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ΋ͪΖΜ

Slide 9

Slide 9 text

Ͱ΋ࣗ෼Ͱॻ͚Δ͸ͣʂ 9 Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

Slide 10

Slide 10 text

'J[[#V[[ͷςετ Λॻ͍ͯΈΔ͜ͱʹ͢Δͧʂ 10 Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

Slide 11

Slide 11 text

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) } } }

Slide 12

Slide 12 text

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) } } } ೖྗ஋ͱظ଴஋ͷλϓϧ

Slide 13

Slide 13 text

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) } } } ഑ྻͰςετσʔλΛ༻ҙ

Slide 14

Slide 14 text

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) } } } ϧʔϓͰॱ൪ʹݕূ

Slide 15

Slide 15 text

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) } } }

Slide 16

Slide 16 text

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) } } } ςετσʔλ௥Ճɾ࡟আָ͕ͩ͠ɺ ݟ௨͠΋Α͍ؾ͕͢Δʂ

Slide 17

Slide 17 text

ςετ͕ࣦഊͨ࣌͠ 17 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ͔͠͠

Slide 18

Slide 18 text

18 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ςετ͕ࣦഊͨ࣌͠

Slide 19

Slide 19 text

19 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ςετ͕ࣦഊͨ࣌͠ Τϥʔ͕ू໿͞Εͯ͠·͏

Slide 20

Slide 20 text

20 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ςετ͕ࣦഊͨ࣌͠ ཧ૝Λݴ͑͹ɺ͜ͷߦʹग़ͯཉ͍͠

Slide 21

Slide 21 text

9$5FTUͰ ΤϥʔදࣔͷҐஔ͸ࢦఆͰ͖Δ 21 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ࣮͸

Slide 22

Slide 22 text

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") } }

Slide 23

Slide 23 text

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") } } ۭจࣈྻͰ͋Δ͜ͱΛݕূ

Slide 24

Slide 24 text

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") } } ݺͼग़͠ݩͷϑΝΠϧɾߦ਺Λऔಘ

Slide 25

Slide 25 text

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") } } Ҿ਺Ͱ౉͢

Slide 26

Slide 26 text

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") } } ࣦഊ͢ΔσʔλͰ࣮ߦ͢Δͱɻɻ

Slide 27

Slide 27 text

27 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ಠࣗͷΞαʔγϣϯ ݺͼग़͠ݩʹΤϥʔදࣔ͞Εͨʂ

Slide 28

Slide 28 text

28 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ಠࣗͷΞαʔγϣϯ ݺͼग़͠ݩʹΤϥʔදࣔ͞Εͨʂ ͜ΕͰվળͰ͖ͦ͏ͩͧʂ

Slide 29

Slide 29 text

1BSBNFUFSJ[FE5FTU Λվળͯ͠ΈΔ 29 Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

Slide 30

Slide 30 text

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) } } }

Slide 31

Slide 31 text

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Λ௥Ճͯ͠

Slide 32

Slide 32 text

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ؔ਺ʹ౉͢

Slide 33

Slide 33 text

33 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. վળ൛ Parameterized Test

Slide 34

Slide 34 text

34 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. վળ൛ Parameterized Test ࣦഊͨ͠Ґஔ͕෼͔Γ΍͍͢ʂ ͜Ε͕ސ٬ͷٻΊ͍ͯͨ΋ͷ

Slide 35

Slide 35 text

MJOF͢Βॻ͖ͨ͘ͳ͍ 35 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ސ٬͸

Slide 36

Slide 36 text

MJOF͢Βॻ͖ͨ͘ͳ͍ 36 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ސ٬͸ OSS Խɺܾఆʂ

Slide 37

Slide 37 text

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"), ]) } }

Slide 38

Slide 38 text

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"), ]) } } ݕূର৅ͷؔ਺Λࢦఆͯ͠

Slide 39

Slide 39 text

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"), ]) } } ݕূ͢Δೖྗ஋ɾظ଴஋Λྻڍ

Slide 40

Slide 40 text

40 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ๻ͷߟ͑ͨ࠷ڧͷ Parameterized Test

Slide 41

Slide 41 text

41 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ๻ͷߟ͑ͨ࠷ڧͷ Parameterized Test https://github.com/ YusukeHosonuma/SwiftParamTest ΂ɺผʹελʔ͕ཉ͍͠Θ͚͡Ό ͳ͍Μ͔ͩΒͶ///

Slide 42

Slide 42 text

·ͱΊ 42 Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

Slide 43

Slide 43 text

43 Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ·ͱΊ • 1BSBNFUFSJ[FE5FTU͸σʔλΛྻڍ͢ΔΑ͏ͳ ςετίʔυͷॻ͖ํ • 9$5FTU4XJGUͰ΋ॻ͚Δ • 9$5"TTFSUܥ͸ΤϥʔҐஔΛ੍ޚͰ͖Δ • Α͔ͬͨΒ044࢖ͬͯΈͯͶʂ ΞΠσΟΞͱ͔΋ืूʂɹ5XJUUFS!UPCJ

Slide 44

Slide 44 text

1BSBNFUFSJ[FEUFTU CFHJOOJOHXJUI 4XJGU1BSBN5FTU 44 Copyright (C) DeNA Co.,Ltd. All Rights Reserved.