Slide 1

Slide 1 text

What's New in Testing!!!

Slide 2

Slide 2 text

ࣗݾ঺հ

Slide 3

Slide 3 text

ࣗݾ঺հ ۄ৓৴ޛ iOS Engineer! ޷͖ͳframework͸HomeKitͱXCTestͰ͢ झຯ" ిࢠ޻࡞⚡ ےτϨ$ ΨδΣοτ%

Slide 4

Slide 4 text

Enhancements

Slide 5

Slide 5 text

xcodebuild • CoreSimulator • Prallel testing

Slide 6

Slide 6 text

͜Ε·ͰͷγϛϡϨʔλଟॏىಈ Xcode8.3·Ͱ͸Simulator.appͰͷىಈͰଟॏىಈΛαϙʔτ͠ ͍ͯͳ͔ͬͨɻ FBSimulatorControllͳͲΛ࢖͍CoreSimulatorΛ௚઀ىಈͤ͞ Δํ๏͕͕͋ͬͨɺެࣜʹͦΕΛαϙʔτͨ͠ܗɻ FBSimulatorControl https://github.com/facebook/FBSimulatorControl

Slide 7

Slide 7 text

FBSimulatorControl

Slide 8

Slide 8 text

ͦͷଞͷଟॏγϛϡϨʔλଟॏىಈϥΠϒϥϦ FBSimulatorControlΑΓ΋࠶࣮ߦͳͲػೳ͕ଟ͍ͷͰXcode9Ҏ ߱΋࢖ΘΕͦ͏ bluepill https://github.com/linkedin/bluepill

Slide 9

Slide 9 text

ؓ࿩ٳ୊

Slide 10

Slide 10 text

Localization ςετ࣌ͷLanguage/Localࢦఆ͕ՄೳʹͳΓ·ͨ͠ɻ

Slide 11

Slide 11 text

Xcode Server XcodeʹXcode Serverͷػೳ͕͖ͭ·ͨ͠ɻ

Slide 12

Slide 12 text

Block-based test teardown

Slide 13

Slide 13 text

Async Testing ඇಉظͷ୯ମͱςετʹ͍ͭͯ͸͜Ε·ͰXCTExpectationΛ ࢖͍ͬͯ·ͨ͠ɻ

Slide 14

Slide 14 text

Limitations • λΠϜΞ΢τͷ৔߹ඞࣦͣഊͱͯ͠ѻΘΕͯ͠·͍·͢ɻ • ΢ΣΠτॲཧ͕ඞཁͱͳΔ • ΤϥʔͷݪҼ͕ಛఆͮ͠Β͍ • ωετͨ͠΢ΤΠτॲཧ͕ग़དྷͳ͍

Slide 15

Slide 15 text

XCTWaiter • XCTWaiterͱͯ͠΢ΣΠτॲཧʹؔ͢Δ෦෼͕XCTestCase͔ Β෼཭͠·ͨ͠ɻ • ର৅ͱͳΔexpectationΛ໌ࣔతʹෳ਺Ͱ͖ΔΑ͏ʹͳΓ·͠ ͨɻ • XCTWaiterʹ߹ΘͤͯDelegateΫϥε΋ఆٛ͞Ε·ͨ͠ • Returns XCTWaiter.Result

Slide 16

Slide 16 text

XCTWaiter

Slide 17

Slide 17 text

XCTWaiter

Slide 18

Slide 18 text

XCTWaiter.Result XCWaiter.Result͕ఆٛ͞Εɺ࣮ߦ݁Ռͱͯ͠ҎԼͷΑ͏ͳ΋ͷ ͕ఆٛ͞Ε͍ͯ·͢ɻ • completed • timedOut • incorrectOrder • invertedFulfillment • interrupted

Slide 19

Slide 19 text

XCTTestExpectation XCTWaiterʹ߹ΘͤͯXCTTestExpectation΋֦ு͞Ε·ͨ͠ɻ (Xcode8.3Ͱ௥Ճ) • ΠχγϟϥΠβ͕͖ͭ·ͨ͠ • expectationDescriptionͰDescriptionͷมߋ͕ग़དྷΔ Α͏ʹͳΓ·ͨ͠ɻ • expectedFulfillmentCountͷઃఆʹΑͬͯɺfulfill()ͷճ਺ʹ ΑΔࢦఆ͕ग़དྷΔΑ͏ʹͳΓ·ͨ͠ɻͭ·Γ

Slide 20

Slide 20 text

XCTTestExpectation • isInvertedϓϩύςΟʹΑͬͯςετͷ੒ޭ/ࣦഊΛٯస͞ ͤΔ͜ͱ͕ग़དྷ·͢ɻ͜ΕͰλΠϜΞ΢τͰ΋੒ޭͱ͢Δ͜ ͱ͕Ͱ͖·͢Ͷɻ • wait(for:timeout:enforceOrder:)ͷΑ͏ʹexpectationͷ ׬ྃॱΛࢦఆ͢Δ͜ͱ͕Ͱ͖·͢

Slide 21

Slide 21 text

XCTWaiterDelegate • nestedWaiter(_:wasInterruptedByTimedOutWaiter:) • waiter(_:didTimeoutWithUnfulfilledExpectations:) • waiter(_:didFulfillInvertedExpectation:) • waiter(_:fulfillmentDidViolateOrderingConstraintsFor:requir edExpectation:)

Slide 22

Slide 22 text

Multi-app Testing

Slide 23

Slide 23 text

Multi-app Testing UI Testing͸͜Ε·Ͱ1ͭͷΞϓϦέʔγϣϯʹରͯ͠ߦ͏΋ͷ Ͱͨ͠ɺ͔͠͠Xcode9͔Βىಈର৅ͷΞϓϦΛࢦఆ͢ΔࣄͰෳ ਺ΞϓϦͷىಈ͕UI TestingͰߦ͑ΔΑ͏ʹͳΓ·ͨ͠ɻ

Slide 24

Slide 24 text

XCUIApplication • New initializer • init(bundleIdentifier: String)Ͱର৅ΞϓϦͷ BundleIDΛࢦఆ • init(url: URL)΋௥Ճ͞Ε·͕ͨ͠MacOSͷΈͳͷͰઆ ໌লུ(ௐ΂ͯͳ͍)

Slide 25

Slide 25 text

XCUIApplication • Activate • ΞϓϦ͸launch()Ͱىಈ͠·͕͢ɺෳ਺ΞϓϦΛίϯτ ϩʔϧ͢Δࡍɺactivate()Λ࢖͏͜ͱʹΑͬͯΞϓϦͷ ੾Γସ͑Λߦ͍·͢ɻ • State property • ෳ਺ͷΞϓϦΛ੾Γସ͑ͨΓ͢Δ͜ͱΛ૝ఆ͢Δʹ͋ͨ ΓɺΞϓϦͷঢ়ଶΛఆٛͨ͠ϓϩύςΟ͕௥Ճ͞Ε·ͨ͠

Slide 26

Slide 26 text

XCUIApplication

Slide 27

Slide 27 text

UI Testing performance

Slide 28

Slide 28 text

FirstMatch API firstMatchΛ࢖͏͜ͱͰͰUIElementͷݕࡧʹஔ͍ͯ࠷ॳʹݟ ͚ͭͨ࣌఺ͰݕࡧΛൈ͚Δࣄ͕ग़དྷΔΑ͏ʹͳΓ·ͨ͠ɻ

Slide 29

Slide 29 text

FirstMatch API ౰વͰ͕͢ɺۃྗཁૉΛߜΔ৚݅͸ࡉ͔͍ํ͕ྑ͍Ͱ͢ɻ

Slide 30

Slide 30 text

Activities, attachments, and screenshots

Slide 31

Slide 31 text

Activities ςετͷखॱΛϒϩοΫͰแΜͰ໊લΛ͚ͭΔ͜ͱ͕ग़དྷΔΑ ͏ʹͳΓ·ͨ͠ɻ

Slide 32

Slide 32 text

͜Ε·Ͱͷςετ

Slide 33

Slide 33 text

͜Ε·Ͱͷςετ

Slide 34

Slide 34 text

͜Ε͔Βͷςετ

Slide 35

Slide 35 text

࣮ߦϩά͔Βݟͨҧ͍ ࡉ͔ͳखॱͰ͸ͳ͘γφϦΦͱͯ͠Θ͔Γ΍͍͢ܗʹ

Slide 36

Slide 36 text

Attachment ςετ࣌ʹ௥Ճͷϩά΍ΠϝʔδͳͲΛ࢒͢͜ͱ͕Ͱ͖ΔΑ͏ ʹͳΓ·ͨ͠ɻ

Slide 37

Slide 37 text

Screenshots ͜Ε·ͰͷࣗಈεΫϦʔϯγϣοτͰ͸ͳ͘ɺద੾ͳλΠϛϯ άͰεΫϦʔϯγϣοτΛࡱΕΔΑ͏ʹͳΓ·ͨ͠ɻ

Slide 38

Slide 38 text

Screenshots

Slide 39

Slide 39 text

Attachment Lifetime Policies εΫϦʔϯγϣοτ΍Ξλονϝϯτ͸ςετ׬ྃ࣌ʹ࡟আ͢ ΔͳͲͷઃఆ΋ՄೳʹͳΓ·͢ɻ

Slide 40

Slide 40 text

https:// developer.apple.com /videos/play/ wwdc2017/409/

Slide 41

Slide 41 text

Ҏ্