Upgrade to Pro — share decks privately, control downloads, hide ads and more …

How to control state in UI Test

Shingo Tamaki
February 20, 2019

How to control state in UI Test

I considered what how to controll state in UI Test interactively.
This is summary of my idea.

Shingo Tamaki

February 20, 2019
Tweet

More Decks by Shingo Tamaki

Other Decks in Technology

Transcript

  1. XCUITestʹ͓͚Δঢ়ଶ
    ੍ޚʹ͍ͭͯߟ͑Δ

    View Slide

  2. XCUITestͱ͸
    XCTestʹؚ·ΕΔUI Testingͷ௨শ
    ςετର৅ͷΞϓϦʹର͠ɺϢʔβͱಉ౳ͷૢ࡞Λߦ͏UIςε
    τͷͨΊͷػೳ

    View Slide

  3. ঢ়ଶʹ͍ͭͯ
    UIςετ͸ΑΓϢʔβʹ͍ۙܗͰςετର৅ΞϓϦΛϒϥοΫ
    ϘοΫεతʹૢ࡞͢ΔͨΊɺ
    ಺෦͔Βม਺΍ϝιουʹΞΫηε͠΍͍͢୯ମςετʹൺ΂
    Δͱঢ়ଶΛ࡞Γʹ͍͘ͱݴ͑·͢ɻ

    View Slide

  4. ঢ়ଶ੍ޚͷྫ(XCTest)
    XCUIApplicationͷlaunchArguments΍launchEnvironmentΛ
    ࢖ͬͯىಈ࣌ʹઃఆ஋Λ༩͑Δ
    let app = XCUIApplication()
    app.launchArguments.append("loggedIn")
    app.launchArguments.append(contentsOf: ["-key", "abc111222333"])
    app.launchArguments.append(contentsOf: ["-skipLogin", "YES"])
    app.launchEnvironment["TestMode"] = "UITest"

    View Slide

  5. ঢ়ଶ੍ޚͷྫ(Target Application)
    ςετର৅ͷΞϓϦͰProcessInfoͷarguments,environment
    ͔Β஋ΛऔΓग़ͯ͠࢖༻͠·͢ɻ
    ProcessInfo.processInfo.arguments.contains("loggedIn")
    UserDefaults.standard.string(forKey: "key")
    UserDefaults.standard.bool(forKey: "skipLogin")
    ProcessInfo.processInfo.environment["TestMode"]

    View Slide

  6. ىಈ࣌ʹҰׅͰ༩͑Δ͔͠ͳ͍

    View Slide

  7. !
    ىಈޙʹ΍Εͳ͍ͩΖ
    ͏͔ʁ

    View Slide

  8. ྫ͑͹͜Μͳ෩ʹ
    ౎౓ςετ͔Β஋ΛૹΓɺඞཁͳΒςετର৅͔Βड͚औΔ

    View Slide

  9. ݁࿦͔Β

    View Slide

  10. ग़དྷ·ͨ͠

    View Slide

  11. Darwin notifications

    View Slide

  12. Darwin notificationsͱ͸ʁ
    CϕʔεͷAPIͰɺΞϓϦؒΛ·͍ͨͰ௨஌ΛૹΔ͜ͱ͕ՄೳͰ
    ͢
    !
    MMWormholeͳͲʹ΋࢖ΘΕ͓ͯΓɺWatch΍Extensionͷ։
    ൃΛͨ͠ࣄ͕͋Δਓ͸ฉ͍ͨ͜ͱ͕͋Δ͔΋͠Ε·ͤΜɻ

    View Slide

  13. !
    ྑͦ͞͏

    View Slide

  14. Darwin notificationsͷΠϝʔδ

    View Slide

  15. Darwin notificationsͷ੍ݶ
    ௨஌ͷΈΛૹΓ·͢ɻ
    NotificationͷΑ͏ʹuserInfoͳͲ͕͋Γ·ͤΜ
    σʔλΛ΍ΓऔΓ͢ΔͷͰ͋Ε͹Կ͔ผͷ࢓૊Έ͕ඞཁʹͳΓ
    ·͢
    !

    View Slide

  16. ͋͞Ͳ͏͠Α͏ʁ

    View Slide

  17. UIPasteboard

    View Slide

  18. UIPasteboard
    ΞϓϦؒͷ৘ใ࿈ܞͱͯ͠ڞ௨Ͱѻ͑ΔϦιʔεͱͯ͠ݕ౼͠
    ͨதͰ࢖͍উख͕ྑͦ͞͏ͳ΋ͷͱͯ͠UIPasteboardΛ࢖ͬͯ
    ΈΔ͜ͱʹ͠·ͨ͠ɻ

    View Slide

  19. Telepathy

    View Slide

  20. Telepathy (Ծ)

    View Slide

  21. Sample Code(XCTest)
    let exp = XCTestExpectation(description: "normal")
    Telepathy.ask(with: "normal") { message in
    exp.fulfill()
    }
    wait(for: [exp], timeout: 5)

    View Slide

  22. Sample Code(Target Application)
    Telepathy.listen { (message) in
    if message == "foo" {
    // something
    }
    Telepathy.answer()
    }

    View Slide

  23. ࣮ݱग़དྷ·ͨ͠Ͷʁ

    View Slide

  24. ऴΘΓʹ
    Telepathy͸·ͩΞΠσΟΞݕূஈ֊Ͱະެ։ͷϥΠϒϥϦͰ
    ͢ɻ
    ࣮ફʹ͋ͨΓ༗ޮͳϢʔεέʔεͳͲΛ໛ࡧͯ͠Δ࠷தͳͷͰ͝
    ҙݟ͍͚ͨͩΔͱ޾͍Ͱ͢ɻ

    View Slide

  25. Ҏ্

    View Slide