Slide 1

Slide 1 text

QuickͰମݧ͢Δςετͷ ߏ଄Խ iOS Test Night #2 (01/19/2017)

Slide 2

Slide 2 text

ͲͷςετϑϨʔϜϫʔΫΛ࢖ͬ ͍ͯ·͔͢?

Slide 3

Slide 3 text

Quickͱ͸ • SpecελΠϧͳςετΛ࣮ݱ͢ΔϑϨʔϜϫʔΫ • RSpec(Ruby)΍ͦͷ೿ੜπʔϧ͔ΒώϯτΛಘͨ • @modocache (Kiwi Contributor)ʹΑΓ։ൃ͞Εͨ

Slide 4

Slide 4 text

ࢲ͕QuickΛ࢖͏ཧ༝ • ίϛϡχςΟͰ։ൃ͞Ε͍ͯΔ • RSpec/Rubyςετπʔϧͷ஌ݟ • ςετίʔυͷߏ଄Խ

Slide 5

Slide 5 text

iOSςετπʔϧ͸ίϛϡχςΟ ʹΑͬͯݗҾ͞Ε͖ͯͨ • OCTestɻGTMɻSenTestingKitͷެࣜԽ • GHUnit, Kiwi, Specta • KIF, Calabash, Appium

Slide 6

Slide 6 text

class PersonTests: XCTestCase { var person: Person! override func setUp() { person = Person(name: "John", age: 20) } func testName() { XCTAssertEqual(person.name, "John") } func testAge() { XCTAssertEqual(person.age, 20) } }

Slide 7

Slide 7 text

class PersonSpec: QuickSpec { override func spec() { var person: Person! beforeEach { person = Person(name: "John", age: 20) } it("Name") { XCTAssertEqual(person.name, "John") } it("Age") { XCTAssertEqual(person.age, 20) } } }

Slide 8

Slide 8 text

ผͷPersonͷςετΛ૿΍ͨ͠ ͍

Slide 9

Slide 9 text

class PersonTests: XCTestCase { func testJohn() { let person = Person(name: "John", age: 28) XCTAssertEqual(person.name, "John") XCTAssertEqual(person.age, 28) } func testNancy() { let person = Person(name: "Nancy", age: 18) XCTAssertEqual(person.name, "Nancy") XCTAssertEqual(person.age, 18) } }

Slide 10

Slide 10 text

໰୊఺ • ςετର৅ͷηοτΞοϓ͕ஈʑෳࡶʹ • ෳ਺ͷassertΛ1ͭͷςετͰ͕ͪ͠ • ԿΛͲ͏ςετ͍͔ͨ͠ᐆດʹ……

Slide 11

Slide 11 text

class PersonSpec: QuickSpec { override func spec() { var person: Person! context("John") { beforeEach { person = Person(name: "John", age: 28) } it("Name") { XCTAssertEqual(person.name, "John") } it("Age") { XCTAssertEqual(person.age, 28) } } context("Nancy") { beforeEach { person = Person(name: "Nancy", age: 18) } it("Name") { XCTAssertEqual(person.name, "Nancy") } it("Age") { XCTAssertEqual(person.age, 28) } } } }

Slide 12

Slide 12 text

Quickجຊ༻ޠ • describe͸ʮมΘΒͳ͍ࣄ࣮ʯϝιου໊΍ػ ೳɺ؍఺ • context͸ʮಛఆͷঢ়گʯલఏ৚݅΍ಛఆͷΦϒ δΣΫτͷঢ়ଶ • ΫϩʔδϟͷείʔϓͰߏ଄Λදݱ͢Δ

Slide 13

Slide 13 text

QuickͰղܾͰ͖ͳ͍໰୊ • ςετίʔυ͕୹͔͘ͳΔ • ςετͣ͠Β͍ίʔυΛͳΜͱ͔͢Δ • XCTestͰ͸࣮ݱͰ͖ͳ͍ػೳΛ׆༻͢Δ

Slide 14

Slide 14 text

Qucikςετͷॻ͖ํ͸XCTestͰ ΋Ͱ͖Δ • ςετ໊ͷن໿Λࣗ෼ͰकΔඞཁ͕͋Δ • ৑௕ʹͳΓಡΈͮΒ͘ͳΓ͕ͪ • QuickͰXCTestͬΆ͍ϕλͳςετͱ͍͏ͷ΋ॻ ͚Δ

Slide 15

Slide 15 text

class PersonAsJohnTests: XCTestCase { var john: Person! override func setUp() { john = Person(name: "John", age: 20) } //func testName() { //func testAge() { } class PersonAsNancyTests: XCTestCase { var nancy: Person! override func setUp() { nancy = Person(name: "Nancy", age: 18) } //func testName() { //func testAge() { }

Slide 16

Slide 16 text

QuickಋೖͷϦεΫ • ֶशίετɿผͷࢥ૝Λ࣋ͭϑϨʔϜϫʔΫͷ ಋೖ • ੑೳίετɿ࢓૊Έ্Φʔόʔϔου͕ੜ͡Δ • อकίετɿXcode+SDKͷมߋʹରͯ͠௥ै͢ Δ

Slide 17

Slide 17 text

ςετΛߏ଄Խ͢Δར఺ • ςετέʔεΛ૿΍͠΍͍͢ • ςετ৚݅Λ໢ཏ͠΍͍͢ • ϝϯςφϯε͠΍͍͢(૿͖͑ͯͨΒtreeΛ෼ׂ)

Slide 18

Slide 18 text

ͲΜͳ࣌ʹςετΛॻ͘΂͖͔?

Slide 19

Slide 19 text

ෆ۩߹ͷमਖ਼ - ϦάϨογϣϯ • मਖ਼ͷඞཁ͕ੜ͡Δ=Ϣʔβʔʹͱͬͯʮͨͩ͠ ͍ಈ࡞ʯͷՁ஋͕͋Δ • ࣦഊ͢Δςετέʔε͕༻ҙ͞Ε͍ͯΔ • E2EͰςετ͢ΔͷͰઃܭΛେ͖͘มߋͰ͖Δ

Slide 20

Slide 20 text

৽نϞδϡʔϧͷ௥Ճ • ৽ػೳ=Ձ஋͕͋Δ • ઃܭͱͯ͠ͷςετυϦϒϯ • طଘͷઃܭͷӨڹΛड͚ͳ͍ͷͰ೉қ౓͕௿͍

Slide 21

Slide 21 text

πʔϧΑΓϚΠϯυηοτ • ʮ໾ʹཱͭςετΛॻ͘ͷ͸ඇৗʹ؆୯Ͱɺ XCTestͰ΋QuickͰ΋େͨ͠ҧ͍͕ͳ͍ʯ @modcache • http://modocache.io/testing-tutorial-in- japanese • ඞཁͳͷ͸υΩϡϝϯτ΍஌ݟΛڞ༗͢Δ৔ • ςετΛॻ͍ͯ։ൃ͕Ճ଎ͨ͠ମݧ

Slide 22

Slide 22 text

·ͱΊ • ςετͷߏ଄ԽʹऔΓ૊ΉͱXCTestͰ͸৑௕ʹ ͳΔ • Quick͸ςετΛ໊લͱ֊૚ͰදݱͰ͖Δ • ߏ଄ԽʹΑͬͯʮ໾ʹཱͭςετΛॻ͘ʯ͜ͱ ͕ॏཁ