Где OCUnit хранит NSUserDefaults?
Я прочитал вопрос Простой способ увидеть сохраненные NSUserDefaults?
Я нашел файл.plist для приложения, но где он находится для пакета тестирования?
3 ответа
Похоже, что OCUnit не хранит NSUserDefaults
настойчиво, а в памяти. Но я могу ошибаться.
Если вы используете интеграцию Xcode 4 с OCUnit, он вставляет тестовый пакет в работающее приложение. Поэтому NSUserDefaults сохраняются в самом приложении. Это проблематично для модульных тестов: когда вы запускаете приложение вручную, ваши значения по умолчанию могут быть перезаписаны вашими тестами.
Вместо того, чтобы использовать [NSUserDefaults standardUserDefaults]
напрямую, используйте внедрение зависимостей, передавая пользовательские значения по умолчанию в качестве аргумента инициализатора. Затем вы можете пройти двойной тест, который вы можете запросить. (Альтернативой внедрению зависимостей является возвращение NSUserDefaults из вспомогательного метода, переопределяющего этот метод для возврата двойного теста при необходимости.)
В моем окружении (Xcode 4.2, запуск тестов в симуляторе) NSUserDefaults
пишет в следующий файл:
~/Library/Application Support/iPhone Simulator/Library/Preferences/otest.plist`
Я думаю, вы не видели файл из-за NSUserDefaults
механизм кэширования (объясняется в справочнике классов), а также потому, что юнит-тесты вашего проекта не выполняются достаточно долго, чтобы истек интервал времени кэширования.
otest.plist
гарантированно будет написано, однако, если что-то вызывает NSUserDefault
метод экземпляра synchronize
пока идут тесты.