Ответ 1

Кажется, что OCUnit не сохраняет NSUserDefaults настойчиво, а скорее в памяти. Но я мог ошибаться.

Ответ 2

Если вы используете интеграцию Xcode 4 с OCUnit, она вводит тестовый комплект в запущенное приложение. Поэтому NSUserDefaults сохраняются в самом приложении. Это проблематично для модульных тестов: при запуске приложения вручную ваши настройки по умолчанию могут быть перезаписаны вашими тестами.

Вместо прямого использования [NSUserDefaults standardUserDefaults] используйте инъекцию зависимостей, передав значения по умолчанию пользователя в качестве аргумента инициализатора. Затем вы можете пройти в тестовом двойном, который вы можете запросить. (Альтернатива инъекции зависимостей возвращает NSUserDefaults из вспомогательного метода, переопределяя этот метод, чтобы возвращать двойной тест при необходимости.)

Ответ 3

В моей среде (Xcode 4.2, запуск тестов в симуляторе) NSUserDefaults записывается в следующий файл:

~/Library/Application Support/iPhone Simulator/Library/Preferences/otest.plist`

Я предполагаю, что вы не видели файл из-за механизма кэширования NSUserDefaults (объяснено в ссылке на класс), и потому, что ваши тесты модуля проекта не запускаются достаточно долго, чтобы истечь интервал времени кеширования.

otest.plist гарантируется, однако, если что-то вызывает метод экземпляра NSUserDefault synchronize во время выполнения тестов.