24

Apple は Xcode 7 で新しい UI テストを導入しましたが、テストがアプリを起動するたびに苦労します。アプリケーションが以前に持っていたデータから始まります。これは、テストを独立させることはできず、他のテストの影響を受ける可能性があることを意味します。

テストを実行しているアプリケーションはテスト対象のアプリケーションのバンドルにアクセスできないため、ユーザーのデフォルトやその他のデータにアクセスすることはできません。スクリプトは、テストの前後に実行できるため、問題外です。また、iOS で NSTask を実行して、各テスト スイートの前にスクリプトを実行する方法はありません。

各テスト スイートの前にアプリケーション データをリセットする方法はありますか?

4

4 に答える 4

7

内部で UITests 用にアプリを準備してapplication:didFinishLaunchingWithOptions:も問題ない場合は、次の操作を実行できます。

setUp()テスト クラスを拡張するメソッドで、次XCTestCaseのコードを追加します。

let application = XCUIApplication()
application.launchEnvironment = ["UITESTS":"1"]
application.launch()

次に、application:didFinishLaunchingWithOptions:次のコードを使用してフラグを確認できます。

func application(_ application: UIApplication,
                 didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool {

    let env = ProcessInfo.processInfo.environment
    if let uiTests = env["UITESTS"], uiTests == "1" {
        // do anything you want
    }
    // further set up code
}

もちろん、それがあなたのためのオプションである場合。

注:フラグの"1"引数として設定する代わりに"UITESTS"、さまざまなテスト ケースやテスト メソッドにさまざまな値を指定することができます (ただし、そのような場合は、 ではなく、テスト メソッドからアプリケーションを起動する必要がありますsetUp()) 。

注 2: フラグを処理するコードを#if DEBUGブロックにラップすることをお勧めします。

于 2016-01-30T21:13:44.663 に答える