У меня есть код, который вызывает в какой-то момент [NSBundle mainBundle]
, в основном для чтения/установки предпочтений. Когда я тестирую метод, тест терпит неудачу, потому что mainBundle теста не содержит файл.Ошибка XCTest при вызове [NSBundle mainBundle]
Это a known issue, что компания Apple не исправит, как они считают это not a bug:
суть их ответа в том, что XCTest работает правильно, вернув свою собственную основную связку вместо расслоения целевой тест.
Ранее наш кодовая использовал категорию переопределение по методу +mainBundle
класса NSBundle
«s работать вокруг этого. Но this is dangerous because the behaviour of overriding an existing method in a category is undefined.
Если имя метода, объявленного в категории такой же, как метод в исходном классе, или метода в другой категории по одному классу (или даже суперкласса), его поведение не определено, как к реализация этого метода используется во время выполнения.
На самом деле Xcode предупреждает вас об этом:
Категория реализует метод, который также будет реализован его основной класс
Итак, что такое правильный способ для решения этой проблемы ?
XCTest * не * и никогда не вернулся тестовый пакет для '+ [NSBundle mainBundle]'. (То же самое с OCUnit.) Я не уверен, откуда появилась идея о том, что она появилась - связанная страница больше недоступна, поэтому я не вижу, есть ли у нее дополнительные ссылки, но насколько я знаю, мы никогда не говорили любой другой. –