NSHomeDirectory в модульном тестировании iPhone
Когда используешь NSHomeDirectory()
внутри модульного теста я получаю:
/Users/hgpc/Library/Application Support/iPhone Simulator/5.0
Я ожидал фактический домашний каталог текущего приложения. Что-то вроде:
/Users/hgpc/Library/Application Support/iPhone Simulator/5.0/Applications/6D1091C6-02AE-4803-A7DF-D623D0F89579
Что я делаю неправильно?
4 ответа
Чтобы решить эту проблему, установите значение Bundle Loader в настройках сборки целевого объекта Unit Test на:
$(BUILT_PRODUCTS_DIR)/MyAppName.app/MyAppName
а также ваш тестовый хост для:
$(BUNDLE_LOADER)
Вы должны найти NSHomeDirectory()
возвращает правильное значение.
К сожалению, находясь в модульном тесте (или логическом тесте), вы не "в своем приложении" (т.е. в его песочнице). Вот почему такие вещи, как NSDocumentDirectory или [NSBundle mainBundle] не будут работать.
Если это работает для вас, я бы просто создал папку "Документы" в
/Users/hgpc/Library/Application Support/iPhone Simulator/5.0
Возможно, вы захотите сделать это в настройках вашего теста, чтобы вы могли удалить его в tearDown.
Если это не сработает, потому что ваши тесты зависят от того, что уже находится в NSDocumentDirectory вашего приложения, вы можете немного переосмыслить свой тест, поскольку все они должны быть автономными (т.е. установить все ресурсы из вашего пакета в setUp)
Вы также можете использовать NSLibraryDirectory вместо NSDocumentDirectory, в зависимости от того, что вы хотите проверить.
Если вы хотите настроить свою цель теста на Тест приложения, добавьте параметры, упомянутые Эндрю Эблингом:
$(BUILT_PRODUCTS_DIR)/MyAppName.app/MyAppName
а также ваш тестовый хост для:
$(BUNDLE_LOADER)
Если у вас нет этих параметров, это означает, что ваши тесты логичны. Но если вы добавите эти параметры, вы измените тесты на Тесты приложений и заметите, что AppDelegate запустится, если вы запускаете тесты.
см. ссылку для получения дополнительной информации.
Таким образом, вы можете использовать NSHomeDirectory(только для тестов приложений).
На устройстве iOS вы должны использовать
NSArray *path = NSSearchPathForDirectoriesInDomains(
NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentDirPath = [paths objectAtIndex:0];