Когда я запускаю свои тесты в XCode 5, основное окно моего приложения OS X появляется на экране в течение пары секунд во время выполнения тестов. Зачем? Даже если я раскомментирую все свои тесты, он все равно открывает мое главное окно.
Модульное тестирование XCode 5: запускает мое приложение
Ответ 1
Вы выполняете тест приложения, а не логический тест. Это означает, что экземпляр вашего приложения будет запущен, а затем запустите модульные тесты. Это позволяет выполнить какой-либо интеграционный тест, который требует, чтобы ваше приложение работало.
Здесь приведено руководство по настройке теста приложения и логического теста.
Если вы хотите изменить его на логический тест (чтобы он работал быстрее и не нужно было запускать приложение в первую очередь):
- перейдите к настройкам сборки для unit test target
- поиск
Bundle
- удалить загрузчик пакетов и тестовый хост
Ответ 2
Правильно, вам нужно удалить "Bundle Loader" и "Test Host" из ваших настроек сборки.
Но вы должны добавить необходимые файлы реализации в ваш целевой объект unit test. Необходимые файлы - это то, что вы хотите использовать в своих случаях unit test. Вам нужно сделать это, потому что в логических тестах XCode не будет компилировать все приложение. Поэтому некоторые из ваших файлов будут отсутствовать.
Это сообщение об ошибке, если вы оставили файл:
Undefined symbols for architecture i386:
"_OBJC_CLASS_$_Module", referenced from:
objc-class-ref in Lobic Network.o
objc-class-ref in Logic_Unit.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Вы можете добавить отсутствующие файлы, выбрав файл реализации и доведя инспектор файлов. Будет раздел с названием "Целевое членство", и вы также можете установить целевое членство файлов на свой unit test.
Ответ 3
В XCTest файлы приложений НЕ НЕ должны быть включены в целевые объекты XCTest. Комплект XCTest связан с приложением, которое делает эти файлы доступными во время выполнения.
Чтобы сделать эту работу, убедитесь, что параметр компилятора "Символы, скрытые по умолчанию" установлен на НЕТ В пределах целевого приложения.
Вот сообщение в блоге со скриншотами для ясности: http://zmcartor.github.io/code/2014/02/24/slim-xctest-targets
Преимущество такого подхода заключается в том, что тестовая цель выполняется намного быстрее.
Ответ 4
В XCode 7 удаление Host Application
не работает для меня. В действительности я использую следующее, чтобы избежать прогона приложений.
-
in
main.m
static bool isRunningTests() { NSDictionary* environment = [[NSProcessInfo processInfo] environment]; NSString* testEnabled = environment[@"TEST_ENABLED"]; return [testEnabled isEqualToString:@"YES"]; }
-
изменить main()
int main(int argc, char * argv[]) { @autoreleasepool { if (isRunningTests()) { return UIApplicationMain(argc, argv, nil, nil); } else { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } } }
Ответ 5
Если тесты предназначены для кода, который может запускаться на рабочем столе и на мобильных устройствах, вы можете запускать их без симулятора или размещать их в своем приложении.
Проблема заключается в том, что вы не можете использовать схему выбора для вашей обычной цели (рабочего стола или iOS) для запуска теста.
Следующее работало для меня в Xcode6.
File > New Target...
Выберите Cocoa Testing Bundle из категории OS X.
Постарайтесь выбрать None
из раскрывающегося списка цели.
Нажмите "Готово". Добавьте соответствующие файлы в новую цель, как описано выше.
Теперь создайте схему для запуска теста.
Выберите схему выбора справа вверху и выберите New Scheme...
, щелкните раскрывающийся список и перейдите вниз по списку к новой цели. Теперь вы можете выбрать схему из схемы выбора и использовать ⌘U для запуска тестов.
Ответ 6
Я просто потерял утро на этом.
Проект был создан в XCode 4 и использовался SenTesting.
Протестировано тестирование миграции на XCode 5/XCTTest
Если бы такая же проблема - приложение запускалось в симуляторе, и тест никогда не начинался после того, как вы попробуете все (смените приложение на логические тесты, перейдите в XCTest, удалите SenTesting)
отказался от создания чистого проекта XCode 5.
Добавлены все мои файлы и тесты прошли нормально.
По-прежнему могут возникать проблемы с Storyboard, поскольку они были созданы с XCode 4.
Резкий, но он работает, поэтому держите его в качестве последнего средства.
Ответ 7
В XCode5 приложение запускается. Этот ответ показывает, как изменить свой делегат при выполнении модульных тестов, чтобы он сразу же удалялся: fooobar.com/info/124683/...