Пользовательский NSURLProtocol не вызывает canInitWithRequest:

Я реализовал подкласс NSURLProtocol. Мне нужно, чтобы он издевался над ответами URL-адресов для модульного теста. Я зарегистрировал свой класс в методе setUp модульного теста.

- (void)setUp
{
    [NSURLProtocol registerClass:[RDMockResponseURLProtocol class]];

    [DSMockResponseURLProtocol.mockResponses setObject:[self bigFileResponse]
                                                forKey:[self bigFileURL]];

    <...>
}

Я переопределил метод класса canInitWithRequest: NSURLProtocol и другие его методы, которые необходимо переопределить.

@implementation DSMockResponseURLProtocol

<...>

+ (BOOL)canInitWithRequest:(NSURLRequest *)request {
    return [DSMockResponseURLProtocol.mockResponses.allKeys containsObject:request.URL];
}

К сожалению, canInitWithRequest: не вызывается.

Я использую NSURLSession, настроенный на продолжение задач в фоновом режиме. Разве это не вызывает проблему?

sessionConfiguration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:identifier];

Пожалуйста, поделитесь со мной любыми идеями, которые у вас есть! Заранее спасибо [Поклон]


person Dmytryk Skorokhod    schedule 17.12.2019    source источник


Ответы (1)


Кажется, я нашел ответ в документации.

Вы не можете использовать пользовательские подклассы URLProtocol в сочетании с фоновыми сеансами.

https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1411050-protocolclasses

person Dmytryk Skorokhod    schedule 17.12.2019
comment
Верно. Фоновые сеансы выполняются в отдельном процессе, и код, работающий в этом фоновом демоне, не может быть настолько тесно связан с кодом, работающим в вашем приложении. - person dgatwood; 02.01.2020