2014-03-18 68 views
14

此问题适用于使用iPhone模拟器进行单元测试。我编写了一系列测试,测试存储我们的数据,合并或不合并我们可以从用户的联系人访问的数据,具体取决于联系人是否存在。我想要一种设置权限的方式,以便我可以在用户授权访问联系人时测试(A),以及在用户拒绝访问联系人时测试(B)。我想要的是一种方式,仅在单元测试中硬编码权限值。我不想提示它,因为那样会阻止单元测试运行,而且还会带来额外的困难,因为许可权永远都会被设置为该值。iOS通过UnitTest访问AddressBook联系人;如何设置权限?

因此,我正在联系SO社区,以便通过控制单元测试中的权限来查看还有谁可能正在测试其代码与地址簿联系人的交互。有没有人有一个配方,允许我测试用户的双方给予和拒绝访问地址簿联系人?

我正在使用XCTestCase父类。如果这有助于解决这个问题,我会开放使用其他的东西。

我已阅读所有相关的SO问题和答案在这方面。他们专注于帮助人们编写许可 - 询问例程并在应用程序中访问地址簿联系人。我知道如何做到这一点。我特别谈论如何在单元测试中伪造地址簿权限。

+2

这会帮助以任何方式?看起来这不像KIF框架特有的。 https://groups.google.com/forum/#!topic/kif-framework/xayP4VVBPyg –

回答

0

起初因为我做这个 1)在应用程序 - >

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

2)测试这个问题我使用类OCMock的,预定义的价值观和方法 链接在这里 - 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; 
     } 
    }); 
} 

我发现了一个方便的小网站上面的代码中调用:

www.raywenderlich.com

0

//通讯簿授权授予

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

单元测试

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 – 2015-07-30 06:59:59

相关问题