2017-11-28 21 views
1

응용 프로그램에서 성공적인 로그인을 테스트하려고합니다.XCTest : UI 테스트의 NSUserdefaults에서 값을 가져 오지 못했습니다. 클래스

TestClass에서 NSUserdefaultBool의 값을 가져 오는데,이 값은 앱에 로그인 할 때 true로 설정됩니다.

코드 : LoginViewController :의 ViewController

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

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

[[NSUserDefaults standardUserDefaults] synchronize]; 

} 

문제 : 값이 여전히 거짓 (기본값)을주고 로그인하는 동안 만 테스트 클래스에서 true로 설정되고있다.

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'를 호출합니까? – dasdom

+0

@ GoodSp33d : 예, 응용 프로그램 번들 ID를 사용하여 userdefault를 초기화 해 보았습니다. NSUserDefaults * userDef = [[NSUserDefaults alloc] initWithSuiteName : @ "com.infosys.marketingpadbshdevtest2"]; 동기화가 진행된 후에도 여전히 거짓이 표시됩니다. 또한 비동기 작업에 대한 XCTwaiter 사용하고 있습니다. – Smriti10

답변

0

UItest 클래스

감사는 응용 프로그램의 내부 상태에 액세스 할 수 없습니다. 따라서 우리는 UITest 클래스에서 응용 프로그램 코드에 저장된 UserDefault 값을 검색 할 수 없습니다. 이러한 값에 액세스하려면 UnitTest 클래스에서 수행 할 수 있습니다.

UITest 클래스에서는 로그인 후 userdefault에 자체 부울 키를 작성하고 필요할 때마다 다른 테스트 함수에서 키 상태를 확인하여 동기화 상태를 확인할 수있었습니다 (이 키는 외부가 아니라 UITest 클래스에서만 액세스 할 수 있습니다).