NSHomeDirectory в модульном тестировании iPhone - PullRequest
8 голосов
/ 05 декабря 2011

При использовании 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 ]

6 голосов
/ 18 сентября 2012

Чтобы решить эту проблему, установите значение Bundle Loader в настройках сборки целевого объекта Unit Test на:

$(BUILT_PRODUCTS_DIR)/MyAppName.app/MyAppName

, а также ваш тестовый хост:

$(BUNDLE_LOADER)

затем вы должны найти NSHomeDirectory() возвращает правильное значение.

3 голосов
/ 19 декабря 2011

К сожалению, пока вы находитесь в модульном тесте (или логическом тесте), вы не «в своем приложении» (то есть в его песочнице).Вот почему такие вещи, как NSDocumentDirectory или [NSBundle mainBundle] не будут работать.

Если это работает для вас, я просто хочу создать папку «Документы» в

/Users/hgpc/Library/Application Support/iPhone Simulator/5.0

.Возможно, вы захотите сделать это в настройках вашего теста, чтобы вы могли удалить его в tearDown.

Если это не сработает, потому что ваши тесты зависят от того, что уже находится в NSDocumentDirectory вашего приложения, вы можете захотеть повторнонемного подумайте о своем тесте, поскольку все они должны быть автономными (т.е. установить все ресурсы из вашего пакета в setUp)

Вы также можете использовать NSLibraryDirectory вместо NSDocumentDirectory, в зависимости от того, что именно вы хотите протестировать.

1 голос
/ 08 августа 2013

Если вы хотите настроить свою цель теста на Тест приложения, добавьте параметры, упомянутые Эндрю Эблингом:

$(BUILT_PRODUCTS_DIR)/MyAppName.app/MyAppName

, а также ваш тестовый хост:

$(BUNDLE_LOADER)

Если у вас нет этих параметров, это означает, что ваши тесты логичны. Но если вы добавите эти параметры, вы измените тесты на Тесты приложений и заметите, что AppDelegate запустится, если вы запускаете тесты.

см. ссылка для получения дополнительной информации.

Таким образом, вы можете использовать NSHomeDirectory (только для тестов приложений.

0 голосов
/ 05 декабря 2011

На устройстве iOS вы должны использовать

NSArray *path = NSSearchPathForDirectoriesInDomains(
            NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentDirPath = [paths objectAtIndex:0];
...