Slide 1

Slide 1 text

XCUITest͢Δ࣌ͷ TIPs ʙ͋ͳͨΛॿ͚ΔXCUITest΁ʙ @PoohSunny iOS Test Night #4

Slide 2

Slide 2 text

@PoohSunny { work: "σΟϕϩούʔ", company: "ϦΫϧʔτδϣϒζ", lang: ["Swift", "Java", "Groovy"], community: [ "TDDBC", "Agile Samurai Base Camp", "೔ຊSeleniumϢʔβʔίϛϡχςΟ" ] }

Slide 3

Slide 3 text

Selenium޷͖1 1 ग़ॴɿٕज़ධ࿦ࣾ

Slide 4

Slide 4 text

iOSॳΊͯ̍೥ ʢποίϛ׻ܴʂʣ

Slide 5

Slide 5 text

ΑΖ͘͠ ͓ئ͍͠·͢

Slide 6

Slide 6 text

UITestͷ࿩

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

XCUITest ࢖͍ͬͯ·͢

Slide 9

Slide 9 text

TIPsͷ঺հ ଞͷςετϑϨʔϜϫʔΫͰ΋࢖͑Δ͸ͣʂ

Slide 10

Slide 10 text

TIP1 Ͳ͜·Ͱςετ͢Ε͹͍͍Μ ͩorz

Slide 11

Slide 11 text

εϞʔΫςετ

Slide 12

Slide 12 text

1. جຊతͳಈઢ 2. མͪΔͱॏେো ֐ʹͳΔ෦෼

Slide 13

Slide 13 text

TIP2 UIΛมߋͨ͠Βͨ͘͞Μͷς ετ͕͚ͯ͜͠·ͬͨorz

Slide 14

Slide 14 text

ϖʔδΦϒδΣΫτύλʔϯ Λར༻ͨ͠มߋͷہॴԽ ςετର৅ͷϖʔδΛΦϒδΣΫτͱͯ͠ςετ ͔Β੾Γ཭͠ɺϝϯςφϯεੑΛߴΊΔ2 2 http://www.seleniumhq.org/docs/06testdesign_considerations.jsp#page-object-design-pattern

Slide 15

Slide 15 text

ཁ໿3 • publicϝιου->ϖʔδ͕ఏڙ͢ΔαʔϏεΛ දݱ • ϖʔδͷ಺෦Λ࿐ग़͠ͳ͍Α͏ʹ͠·͢ • ҰൠతʹɺΞαʔγϣϯ͸ߦ͍·ͤΜ • ϝιου͸ผͷPageObjectsΛฦ͠·͢ 3 http://garbagetown.hatenablog.com/entry/2013/11/07/075011͔ΒҾ༻

Slide 16

Slide 16 text

σΟϨΫτϦ UITest |-- Module // ֤ϖʔδͰڞ௨͢Δ෦඼܈ |-- Screen // ϖʔδΦϒδΣΫτ `-- Test // ࣮ࡍͷςετέʔε

Slide 17

Slide 17 text

αϯϓϧ class TopScreen: BaseScreen { required init(xcuiApplication: XCUIApplication) { super.init(xcuiApplication: xcuiApplication) XCTAssert(app.navigationBars["τοϓ"].exists) } func ݕࡧϘλϯΛԡ͢() -> BaseScreen { app.navigationBars.buttons.elementBoundByIndex(0).tap() return ResultScreen(xcuiApplication: xcuiApplication) } }

Slide 18

Slide 18 text

TIP3 ͜ͷςετԿͯ͠Δͷ͔Θ͔ ΜͶʔorz

Slide 19

Slide 19 text

ςετͷՄಡੑΛ্͛Δ ྫ͑͹ར༻ϝιου໊Λ೔ຊޠʹ͢Δ func testۈ຿஍Λબ୒͢Δ() { let τοϓϖʔδ = TopScreen(xcuiApplication: XCUIApplication()) τοϓϖʔδ.౎ಓ෎ݝΛબ୒͢Δ(Area.౦ژ) let ݕࡧ݁Ռϖʔδ = τοϓϖʔδ.ݕࡧ͢Δ() XCTAssert(ݕࡧ݁Ռϖʔδ.දࣔ͞Ε͍ͯΔ()) }

Slide 20

Slide 20 text

ϖʔδΦϒδΣΫτΛ ࡞ΓࠐΉ func testۈ຿஍Λબ୒͢Δ() { let τοϓϖʔδ = TopScreen(xcuiApplication: XCUIApplication()) let ݕࡧ݁Ռϖʔδ = τοϓϖʔδ.Լه৚݅Ͱݕࡧ͢Δ(Area.౦ژ, "ϑϦʔϫʔυ") XCTAssert(ݕࡧ݁Ռϖʔδ.දࣔ͞Ε͍ͯΔ()) }

Slide 21

Slide 21 text

Given-When-Thenҙࣝͯ͠ ΈΔ func testۈ຿஍Λબ୒͢Δ() { // given let τοϓϖʔδ = TopScreen(xcuiApplication: XCUIApplication()) // when let ݕࡧ݁Ռϖʔδ = τοϓϖʔδ.Լه৚݅Ͱݕࡧ͢Δ(Area.౦ژ, "ϑϦʔϫʔυ") // then XCTAssert(ݕࡧ݁Ռϖʔδ.දࣔ͞Ε͍ͯΔ()) }

Slide 22

Slide 22 text

4 phase test4Ͱ΋ Setup - Exercise - Verify - Teardown 3A5Ͱ΋ Arrange - Act - Assert 5 http://xp123.com/articles/3a-arrange-act-assert/ 4 http://xunitpatterns.com/Four%20Phase%20Test.html

Slide 23

Slide 23 text

·ͱΊ • TIP1. Ͳ͜·Ͱςετ͢Δ͔໎ͬͨΒεϞʔΫ ςετ • TIP2. มߋΛہॴԽ͍ͨ͠ͳΒϖʔδΦϒδΣ Ϋτύλʔϯ • TIP3. ՄಡੑΛ্͍͛ͨͳΒ೔ຊޠΛ࢖͏ͷΛ ԀΘͳ͍

Slide 24

Slide 24 text

͓͠·͍ ʙ͋ͳͨΛॿ͚ΔXCUITest΁ʙ