iOS通过UnitTest访问AddressBook Contacts;如何设置权限?

时间:2014-03-18 18:36:30

标签: ios unit-testing addressbook

此问题适用于将iPhone模拟器与单元测试结合使用。我编写了一系列测试来测试存储我们的数据,合并或不合并我们可以从用户的联系人访问的数据,具体取决于联系人是否存在。我想要一种设置权限的方法,以便我可以测试(A)当用户授予访问联系人的权限时,以及(B)当用户拒绝访问联系人时。我想要的是一种方法,仅在单元测试中,以硬编码权限值。我不想提示它,因为这会阻止单元测试运行时额外的困难,权限将永远设置为该值。

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

我正在使用XCTestCase父类。如果这有助于解决这个问题,我会愿意使用别的东西。

我已经阅读了该领域所有相关的SO问题和答案。他们专注于帮助人们编写权限请求例程并访问其应用程序中的地址簿联系人。我知道该怎么做。我特别谈到如何在单元测试中伪造通讯录权限。

4 个答案:

答案 0 :(得分:0)

起初我这样做 1)在app - >

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

2)为了测试这个问题,我使用了OCMock类,用于预定义的值和方法 链接到这里 - http://ocmock.org

答案 1 :(得分: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

答案 2 :(得分: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");
}

答案 3 :(得分: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");