У меня есть код, который в какой-то момент вызывает [NSBundle mainBundle]
, в основном для чтения/установки настроек. Когда я модульно тестирую метод, тест не проходит, потому что mainBundle теста не содержит файл.
Это известная проблема, которую Apple победила. не исправить, поскольку они считают, что это не ошибка :
Суть их ответа в том, что XCTest работает правильно, возвращая свой собственный основной пакет вместо пакета тестовой цели.
Ранее наша кодовая база использовала переопределение категории в методе класса NSBundle
+mainBundle
, чтобы обойти это. Но это опасно, поскольку переопределение существующего метода в категории не определено.
Если имя метода, объявленного в категории, совпадает с именем метода исходного класса или метода другой категории того же класса (или даже суперкласса), поведение не определено в отношении того, какая реализация метода используется в данный момент. время выполнения.
На самом деле Xcode предупреждает вас об этом:
Категория реализует метод, который также будет реализован его основным классом.
Итак, каков правильный метод решения проблемы?
+[NSBundle mainBundle]
. (То же самое с OCUnit.) Я не уверен, откуда пришла идея, что это действительно так — связанная страница больше не доступна, поэтому я не вижу, есть ли на ней дополнительные ссылки — но, насколько я знаю, мы никогда не говорили кто-либо иначе. - person Chris Hanson   schedule 16.07.2015