2014-03-18 8 views
14

Diese Frage bezieht sich auf die Verwendung des iPhone Simulators mit Komponententests. Ich habe eine Reihe von Tests geschrieben, die das Speichern unserer Daten testen, die zusammengeführt oder nicht mit Daten zusammengeführt werden, auf die wir von den Kontakten des Benutzers zugreifen können, je nachdem, ob der Kontakt existiert oder nicht. Ich möchte die Berechtigungen so festlegen, dass ich (A) testen kann, wenn der Benutzer die Berechtigung zum Zugriff auf die Kontakte erteilt, und (B), wenn der Benutzer den Zugriff auf die Kontakte verweigert. Was ich möchte, ist ein Weg, in Unit Tests nur, den Berechtigungswert fest zu codieren. Ich möchte nicht dazu auffordern, da dies den Komponententest daran hindern würde, ausgeführt zu werden, mit der zusätzlichen Schwierigkeit, dass die Berechtigung für immer auf diesen Wert gesetzt bleibt.iOS Zugriff auf Adressbuchkontakte über UnitTest; Wie setze ich Berechtigungen?

Also bin ich an der SO-Community zu erreichen, um zu sehen, wer sonst die Interaktion ihres Codes mit Adressbuchkontakten testen würde, indem die Berechtigungen in einem Komponententest gesteuert werden. Hat jemand ein Rezept, mit dem ich beide Seiten des Benutzers testen kann, der den Zugang zu den Adressbuchkontakten gewährt und verweigert?

Ich verwende die Elternklasse XCTestCase. Ich wäre offen für etwas anderes, wenn das zur Lösung dieses Problems beitragen würde.

Ich habe alle damit verbundenen SO Fragen und Antworten in diesem Bereich gelesen. Sie konzentrieren sich darauf, Menschen beim Schreiben der Erlaubnis-Fragen-Routinen zu helfen und auf die Adressbuchkontakte in ihrer Anwendung zuzugreifen. Ich weiß, wie ich diesen Teil mache. Ich spreche speziell darüber, wie die Adressbuchberechtigungen in einem Komponententest gefälscht werden.

+2

Würde diese Hilfe gewähren? Sieht nicht so aus, als wäre es spezifisch für das KIF-Framework. https://groups.google.com/forum/#!topic/kif-framework/xayP4VVBPyg –

Antwort

0

Zuerst, wie ich dies tun 1) in app ->

if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusDenied) ... 
if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusRestricted) ... 

2) für die Prüfung dieser Fragen I Klasse von OCMock verwenden, für vordefinierte Werte und Methoden Link hier - http://ocmock.org

0
if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusDenied || 
    ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusRestricted){ 
} else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized){ 
} else{ 
    ABAddressBookRequestAccessWithCompletion(ABAddressBookCreateWithOptions(NULL, nil), ^(bool granted, CFErrorRef error) { 
     if (!granted){ 
      return; 
     } 
    }); 
} 

i den vorhergehenden Code auf einer praktischen kleinen Website genannt:

www.raywenderlich.com

0

// Adreßbuch Authorization

if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusDenied || 
    ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusRestricted) 
{ 
    NSLog(@"Denied"); 
} 
else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) 
{ 
    NSLog(@"Authorized"); 

} 
else 
{ 
    ABAddressBookRequestAccessWithCompletion(ABAddressBookCreateWithOptions(NULL, nil), ^(bool granted, CFErrorRef error) 
              { 
               if (!granted) { 
                NSLog(@"Just denied"); 
                return; 
               } 


               NSLog(@"Just authorized"); 
              }); 
    NSLog(@"Not determined"); 
} 
0

für Unit-Tests in irgendeiner Weise

Nsstring *authorizationStatus; 

if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusDenied || 
    ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusRestricted){ 
    //1 
    NSLog(@"Denied"); 

authorizationStatus = @"Denied"; 

} else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized){ 
    NSLog(@"Authorized"); 
authorizationStatus = @"Authorized"; 


} else{ //ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined 
    //3 
    NSLog(@"Not determined"); 
authorizationStatus = @"Not determined"; 

} 
XCTAssertTrue(authorizationStatus, @"Authorized"); 
+0

https://developer.apple.com/library/ios/documentation/ContactData/Conceptual/AddressBookProgrammingGuideforiPhone/Introduction.html –