2016-07-12 10 views
5

私はログインシステムを使用しているので、ユーザーがアプリケーションにログインすると、セッションをローカルDBに保存します。これにより、ユーザーはアプリケーションを使用するたびにログインできなくなります。明らかに、ユーザーがログインしていない場合は、LoginViewControllerと表示されますが、ユーザーが現在のセッションを検出した場合はHomeViewControllerと表示されます。XcodeのログインシステムによるUIテスト

HomeViewControllerのテストをいくつか作成しましたが、すべて正常に動作します。しかし、私は彼らが現在セッションが保存されているので、彼らは正常に動作していることを認識している。アプリを入力して現在のユーザーをログアウトすると、UIテストを実行すると失敗します。テストにはHomeViewControllerが表示され、代わりにLoginViewControllerが表示されるため、これは意味があります。

LoginViewControllerのUIテストを作成することを考慮して、各テストでユーザーがログインしているかどうかを設定するソリューションを作成するのが妥当と思われます。どうすればいいですか?

答えて

2

いくつかの調査の後、XCUIApplication起動引数/環境で回答が見つかりました。これにより、後でメインコードで解釈できるテストを実行するときに、特定の構成を送信することができます。

私の場合は仕事をするために

は、私は次のコードを配置:

// UI Test 
func testWelcomeIsShown() { 
    let app = XCUIApplication() 
    app.launchArguments.append("isUITestingLogin") 
    app.launch() 
    // Rest of your test steps 
} 

// AppDelegate or wherever you fetch your current session 
func getCurrentSession() { 
    if NSProcessInfo.processInfo().arguments.contains("isUITestingLogin") { 
     session = nil 
    } else { 
     session = DatabaseManager.getSession() 
    } 
} 

注:このコードは記録し、テストを実行するために動作します。ただし、同じロジックで複数のテストを行っている場合は、おそらく最初の3行をtestWelcomeIsShown()のテストクラスのsetUp()に移動します。ただし、テストの記録時にはこの設定が実行されないため、現在のセッション環境を手動で設定する必要があります。

1

また、SBTUITestTunnelを使用して、テスト対象からアプリケーションのサンドボックスにファイルをアップロードすることもできます。ログイン情報が事前に入力されたDBを準備するだけで十分で、起動時にアプリケーションのターゲットに送信されます。

ライブラリの美しさは、アプリケーションのコードがテストコードで汚染されていないことです。

関連する問題