2017-11-28 22 views
1

アプリで正常なログインをテストしようとしています。XCTest:UIテストのNSUserdefaultsで値が取得されないクラス

TestClassで私はログインがアプリで成功した場合trueに設定されているNSUserdefaultBoolの値を取得しています。

コード: LoginViewController:ViewControllerを

-(void) onGetSyncStatusChange:(SUPSyncStatusInfo*)info{ 
.... 
.... 

[[NSUserDefaults standardUserDefaults] setBool:true forKey:@"SynchronisationStatus"]; 

[[NSUserDefaults standardUserDefaults] synchronize]; 

} 

問題:値がログイン時にtrueに設定されているが、テストクラスで、それは まだfalse(デフォルト値)を与えています。

class MarketingPadBoschUITests: XCTestCase { 

    override func setUp() {....} 

    override func tearDown() {...} 

    func testLoginAndSync(){ 

    .... 

    .... 

    XCTAssertTrue(UserDefaults.standard.bool(forKey: "SynchronisationStatus"),"Synchronisation Issue") 

    print("Printing SynchronisationStatus ::: ",UserDefaults.standard.bool(forKey: "SynchronisationStatus")) 
    } 

} 

誰かが、コード内の値セットがtestClassで取得されない理由を知ることができますか? Smriti

+0

あなたのアプリのバンドルIDでユーザーデフォルトを初期化できますか?また、非同期コードを正しい方法でテストしていますか? – GoodSp33d

+0

あなたのテストで 'onGetSyncStatusChange'を呼び出しますか? GoodSp33d @ – dasdom

+0

:NSUserDefaults * USERDEF = [[NSUserDefaults ALLOC] initWithSuiteName: "com.infosys.marketingpadbshdevtest2" @]はい、私はアプリケーションバンドルIDとuserdefault初期化しようとしました。 同期が行われても、まだfalseになっています。また、私は非同期タスクのためにXCTwaiterを使用しています。 – Smriti10

答えて

0

UItestクラス

よろしく、アプリケーションの内部状態へのアクセス権を持っていません。したがって、UITestクラスのアプリケーションコードに保存されたUserDefault値は取得できません。このような値にアクセスしたい場合はUnitTestクラスで行うことができます。

UITestクラスでは、ログイン後にuserdefaultに独自のブールキーを書き込み、必要に応じて他のテスト関数でキーの状態をチェックすることで同期状態を確認することができました。(このキーは外部ではなくUITestクラスでのみアクセス可能です。

関連する問題