#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:
Мне удалось запустить мои модульные тесты, которые тестируют мои классы моделей без запуска симулятора следующим образом:
-
Я не устанавливал никаких настроек загрузки пакета или сборки тестового узла, вместо этого я просто добавил файлы .m, которые я тестировал на этапе сборки, в исходные коды компиляции.
-
Затем я запустил модульные тесты из командной строки, используя:
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 Верно. Поэтому я избегаю этого, устанавливая переменную среды при запуске тестов. Методы делегирования приложения проверяют наличие этой переменной и замыкают, если она установлена.