Где 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 пока идут тесты.

Другие вопросы по тегам