[SwiftUI] [UnitTest] テストの作り方 ( Button 編)

SwiftUI component UITest シリーズ Button 編

対象要素の取得

SwiftUI の Button は、accessibility ID を使って取得できます。

XCUIElementTypeQueryProvider からの取得には、buttons を使用します。

Button を取得

  let app = XCUIApplication()
  app.launch()

  let button = app.buttons["MyButton"]

状態のチェック

Button に使用されているテキストは、label から取得できます。

操作

Button に対して、tap() 等を指定することもできます。

テストコード

以下では、TestButton という accessibility ID を付与した Button に対して、tap した後に、表示されているラベルをテストしています。

Image テスト例

      // UI tests must launch the application that they test.
      let app = XCUIApplication()
      app.launch()

      // (1)
      let button = app.buttons["AccessibilityID"]
      // (2)
      XCTAssertEqual(button.label, "Text")
      // (3)
      button.tap()
コード解説
  1. AccessibilityID という ID を設定された Button を取得
  2. Button の ラベルをテスト
  3. Button を タップ

アプリとテストコード例

画面に、Button が表示され、その Button をタップすると Button のラベル が切り替わるアプリと、そのアプリ用のテストコードです。

Button アプリ

「Button アプリ」
Button アプリ

//
//  ContentView.swift
//
//  Created by : Tomoaki Yagishita on 2020/11/08
//  © 2020  SmallDeskSoftware
//

import SwiftUI

struct ContentView: View {
    @State private var buttonTitle = "Hello"
    var body: some View {
        Button(action: {
            buttonTitle = "World!"
        }, label: {
            Text(buttonTitle)
                .font(.largeTitle)
        })
        .accessibility(identifier: "TestButton")
            .padding()
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
Button アプリ テストコード

    func testButton() throws {
        // UI tests must launch the application that they test.
        let app = XCUIApplication()
        app.launch()
        // (1)
        let button = app.buttons["TestButton"]
        // (2)
        XCTAssertEqual(button.label, "Hello")
        // (3)
        button.tap()
        // (4)
        XCTAssertEqual(button.label, "World!")
    }
コード解説
  1. TestButton という Accessibility ID の設定された Button を取得
  2. ラベルが、"Hello" であることをテスト
  3. ボタンをタップ/クリック
  4. ラベルが、"World!" であることをテスト

まとめ:SwiftUI の Button をテストする方法

SwiftUI の Button をテストする方法
  • XCUIApplication から、accessibility ID 指定で Button を取得する
  • tap() 等の動作は、他の要素と同様
  • 表示している ラベル は、label から名称を取得できる

説明は以上です。
不明な点やおかしな点ありましたら、ご連絡いただけるとありがたいです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です