0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

XCTestのUITestで画面の向きや明暗の設定毎に行われるテストの実行を無効にする方法

Posted at

XCTestでUITestを実行した時に、一つのテストケースしか定義していないのに、何回かアプリが起動したりしていて気になったので、その無効方法を調べてみました。

前提

Xcode16.3

事象の内容

問題のテスト結果を確認してみると、一つのテストケースで、画面の向きや画面の明暗(Appearance)の設定毎のテストを全て実行していました。

image.png

実際のテストコードは以下の様な感じです。

final class SampleTest: XCTestCase {
    
    override class var runsForEachTargetApplicationUIConfiguration: Bool {
        true
    }

    override func setUpWithError() throws {
        continueAfterFailure = false
    }

    func testExample() throws {
        // UI tests must launch the application that they test.
        let app = XCUIApplication()
        app.launch()
    }
}

結論

この事象の無効方法をサクッと説明すると、以下コードのreturnの値をfalseにするだけで良さそうです。

 override class var runsForEachTargetApplicationUIConfiguration: Bool {
        true
    }

公式のドキュメントによると、runsForEachTargetApplicationUIConfigurationは、プロジェクトの設定を読み取り、以下設定毎にlaunch()時に反復的にテストを実行する様です。

  • 外観(例:ライトモードまたはダークモード)
  • 向き(縦向き、横向きなど)
  • ローカリゼーション(例、または)en_USzh_CN

デフォルトではfalseになっている様なので、この挙動を無効にしたい場合は、runsForEachTargetApplicationUIConfigurationのoverrideメソッド定義を削除するだけでも良いです。

一つのテストケースで複数のUI設定を検証できること自体は、非常に強力な機能と思ったので、テストの実行時間が膨らむことが許容できれば使うのはアリと思いましたが、
それでもlaunch()毎に複数実行されるので、この機能をONにする場合はlaunch()は不必要に行わない方が良さそうですね。

とはいえ、UITestターゲットを作成時にデフォルトで存在するUITestケースは上記のテストコードの様になっていて、私はそのまま使用してしまっていたのでこの挙動を知らずに変にハマってしまいました。

今回の知見がどなたかの参考になれば幸いです。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?