IOS для доступа к контактам AddressBook через UnitTest; как установить разрешения?

Этот вопрос относится к использованию iPhone Simulator с модульными тестами. Я написал серию тестов, которые проверяют сохранение наших данных, объединяются или не сливаются с данными, которые мы можем получить от пользовательских контактов, в зависимости от того, существует или нет контакт. Мне нужен способ установить разрешения, чтобы я мог проверить (A), когда пользователь дает разрешение на доступ к контактам и (B), когда пользователь отказывает в доступе к контактам. Мне хотелось бы, чтобы в модульных тестах, чтобы жестко закодировать значение разрешения. Я не хочу запрашивать его, так как это блокирует выполнение unit test с дополнительными трудностями, которые навсегда остаются установленными для этого значения.

Итак, я обращаюсь к сообществу SO, чтобы узнать, кто еще может тестировать их взаимодействие с контактами в адресной книге, контролируя разрешения в Unit Test. У кого-нибудь есть рецепт, который позволяет мне проверить обе стороны пользователя, дающие и запрещающие доступ к контактам адресной книги?

Я использую родительский класс XCTestCase. Я был бы открыт для использования чего-то еще, если бы это помогло решить эту проблему.

Я прочитал все связанные с этим вопросы и ответы в этой области. Они ориентированы на помощь людям в написании запросов на получение разрешений и доступе к контактам адресной книги в своем приложении. Я знаю, как это сделать. Я специально говорю о том, как подделать разрешения адресной книги в Unit Test.

Ответ 1

Сначала, когда я это делаю 1) в приложении →

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

2) для проверки этих проблем я использую класс OCMock, для предопределенных значений и методов ссылка здесь - http://ocmock.org

Ответ 2

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

я нашел предыдущий код на удобном маленьком веб-сайте:

www.raywenderlich.com

Ответ 3

//Разрешение авторизации адресной книги

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");
}

Ответ 4

Для тестирования модулей

 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");