2018年5月21日月曜日

Swift で UI のテストを書こう

概要

前回 Swift のユニットテストを書いてみました
今回は UI のテストを書いてみました

環境

  • macOS 10.13.4
  • Xcode 9.3.1 (9E501)

テスト対象の UI を作成する

StoryBoard を使って簡単な UI を作成します
とりあえず今回はテキストラベルを 1 つ配置しましょう
swift_ui_test1.png

そして作成したラベルに ID を設定しましょう
swift_ui_test2.png
テストではこの ID を使ってラベルのコンポーネントを取得します

テストを記載する

ではテストを書いていきます
テストを記載するのは testUITests になります
swift_ui_test3.png

mport XCTest

class testUITests: XCTestCase {

    override func setUp() {
        super.setUp()
        continueAfterFailure = false
        XCUIApplication().launch()
    }

    override func tearDown() {
        super.tearDown()
    }

    func testExample() {
        let label1 = XCUIApplication().staticTexts["label1"]
        XCTAssertEqual(label1.label, "OK")
    }

}

最大のポイントは XCUIApplication になります
これを使って端末の起動や UI コンポーネントの取得、探索を行います
そして取得した各コンポーネントのプロパティにアクセスして文字列や設定されている色などを取得します
あとはユニットテストのときと同じで XCTAssert を使って値の比較をすれば OK です

各コンポーネントの取得方法はコンポーネントごとに異なるので詳しくはこちらを御覧ください

テストを実行する

Product -> Test で実行しましょう
Cmd + u でも実行できます
ユニットテストも実行されます
ユニットテストの後に UI のテストが実行されるので待ちましょう

各テストごとに結果が表示されます
またコンソールには各テストの実行時間とログのパスが表示されます
swift_ui_test4.png

最後に

Swift + Xcode で UI のテストを記載する方法を紹介してみました
ユニットテストと基本的には同じように書けます
UI コンポーネントを取得する方法だけ UI テスト独自の方法になるかなと思います

今回はかなり簡単な処理しか書いていないので考慮していませんが実際のアプリになるとネットワーク通信などが発生します
その場合はちゃんと通信を待ってから UI コンポーネント上の値をテストしなければなりません

その辺りも後々紹介できればなと思っています

参考サイト

0 件のコメント:

コメントを投稿