OCUnit: как запускать тесты без запуска iPhone simulator?

#unit-testing #xcode4 #ocunit

#модульное тестирование #xcode4 #ocunit

Вопрос:

Я следую руководству по разработке iOS: модульное тестирование приложений. Однако, когда я пытаюсь создать (Command B) LogicTests цель (шаг 8 «Настройка логического тестирования»), я получаю сообщение об ошибке: «Выбранное место назначения запуска недопустимо для этого действия».

Поскольку я добавил цель моего приложения в целевые зависимости LogicTests , я могу запускать модульные тесты с помощью Command U, но это также запускает iPhone Simulator.

Для экономии времени и ресурсов, возможно ли запустить тесты OCUnit (как логические, так и прикладные) без запуска iPhone Simulator?

Ответ №1:

Я понимаю раздражение, вызванное появлением симулятора в модульных тестах. Лучшее средство, которое я смог найти, — это выполнить Command U, за которым следует Command H при запуске модульных тестов. (Control H скрывает симулятор после его появления.) Поскольку он появляется почти мгновенно, это может быть эффективным способом вывести его из поля вашего зрения.

Комментарии:

1. Действительно раздражает при использовании полноэкранного режима, поскольку он перемещает вас на рабочий стол. 🙁

2. @ChrisWagner NSUIntegerMax!

Ответ №2:

Мне удалось запустить мои модульные тесты, которые тестируют мои классы моделей без запуска симулятора следующим образом:

  1. Я не устанавливал никаких настроек загрузки пакета или сборки тестового узла, вместо этого я просто добавил файлы .m, которые я тестировал на этапе сборки, в исходные коды компиляции.

  2. Затем я запустил модульные тесты из командной строки, используя:

     xcodebuild -verbose -target TheElementsUnitTests -configuration Debug -sdk iphonesimulator5.0 clean build
      

Не совсем уверен, почему это не запустило симулятор, но это определенно не так!

Комментарии:

1. Это то, что я использую при непрерывной интеграции с Jenkins. Кажется, это хороший способ запустить тесты и убедиться, что все они прошли. Однако я не нашел способа сделать то же самое из XCode UI без запуска симулятора.

Ответ №3:

Вот небольшой AppleScript, который я настроил на запуск для генерации выходных данных в конфигурации поведения тестирования:

 #!/usr/bin/osascript
activate application "Xcode"
  

Он возвращает Xcode сразу после нажатия command U.

P.S. Я также обнаружил ошибку, и Apple пометила ее как дубликат. Итак, они в курсе.

Ответ №4:

Сколько времени / ресурсов? Вместо того, чтобы сосредотачиваться на их сокращении, я бы сосредоточился на расширении ваших тестов, чтобы они выходили далеко за рамки оригинальных рекомендаций Apple по «логическому тестированию». Эти рекомендации были ограничивающими и были написаны до Xcode 4. Теперь вы можете писать тесты, не задумываясь: «Это логический тест или тест приложения?» — просто протестируйте все.

Комментарии:

1. Вы говорите: «Теперь вы можете писать тесты, не задумываясь: «Это логический тест или тест приложения?» Как и почему? То есть, почему я не хотел бы отделять приемочные тесты от модульных тестов ?

2. То, что Apple назвала «тестами приложений», не то же самое, что приемочные тесты. Мои модульные тесты проверяют мои контроллеры view как изолированные модули. Например: Заполнить модель (возможно, поддельную). Создайте экземпляр view controller с помощью model и invoke -load для имитации загружаемого представления. Убедитесь, что представления отражают модель. Это модульный тест, а не приемочный. … Документ Apple, на который вы ссылаетесь, устарел и не применяется к тестированию Xcode 4.

3. Итак, я обновил свой вопрос: «Возможно ли запустить тесты OCUnit (как логические, так и прикладные) без запуска iPhone Simulator?»

4. Согласен, что документация Apple по этой проблеме устарела, но на самом деле это не дает ответа на первоначальный вопрос. Меня сводит с ума, что запуск «Test» в Xcode 4 запускает симулятор. Это вообще не кажется необходимым.

5. @bradgonesurfing Верно. Поэтому я избегаю этого, устанавливая переменную среды при запуске тестов. Методы делегирования приложения проверяют наличие этой переменной и замыкают, если она установлена.