Эта проблема
Мы используем OCMock для фиктивных объектов во многих наших модульных тестах. В рамках наших тестов, чтобы увидеть, как наш код реагирует на ответы сервера, мы создаем объект NSURLSessionDataTask, а затем пытаемся использовать для него свойство «response».
Сюжет сгущается
До iOS 9 тесты проходили нормально. Свойство также правильно работает в обычном потоке обратного вызова приложения на iOS 9.
Однако в бета-версиях iOS 9 тесты вылетают во время выполнения с ошибкой «неопознанный селектор отправлен в экземпляр». Свойство присутствует в заголовке фреймворка и не помечено как удаленное в документации.
Этот пример кода иллюстрирует проблему:
NSURLSessionDataTask *task = [[NSURLSessionDataTask alloc] init];
NSLog(@"%@", task.response);
Теория
Кажется, что прямое создание экземпляра класса больше не дает свойства во время выполнения. Похоже, что это свойство является @dynamic
свойством, которое генерируется во время выполнения с использованием другого пути создания экземпляра.
Вопрос
Как обойти эту проблему в объектах модульного тестирования OCMock таким образом, чтобы обеспечить обратную совместимость с запуском модульных тестов в iOS 8?
Обновление 1
Обновление OCMock до последней версии (3.1.5) не устраняет проблему.
Для дополнительного контекста, вот как мы используем NSURLSessionDataTask
с OCMock. Тесты не проходят на третьей строке.
NSURLSessionDataTask *task = [[NSURLSessionDataTask alloc] init];
OCMockObject *mockTask = [OCMockObject partialMockForObject:task];
[[[mockTask stub] andReturn:urlResponse] response];
"-[NSURLSessionDataTask response]: unrecognized selector sent to instance 0x7fbee2f1caf0”
и"OCPartialMockObject(NSURLSessionDataTask): cannot stub/expect/verify method 'response' because no such method exists in the mocked class.”
- person BergQuester   schedule 09.09.201525e68089e201140332aed16e042afc99c7b7d737
) решает эту проблему за меня. Спасибо! - person ospr   schedule 23.09.2015