Подтвердить что ты не робот

Модульное тестирование XCode 5: запускает мое приложение

Когда я запускаю свои тесты в XCode 5, основное окно моего приложения OS X появляется на экране в течение пары секунд во время выполнения тестов. Зачем? Даже если я раскомментирую все свои тесты, он все равно открывает мое главное окно.

4b9b3361

Ответ 1

Вы выполняете тест приложения, а не логический тест. Это означает, что экземпляр вашего приложения будет запущен, а затем запустите модульные тесты. Это позволяет выполнить какой-либо интеграционный тест, который требует, чтобы ваше приложение работало.

Здесь приведено руководство по настройке теста приложения и логического теста.

Если вы хотите изменить его на логический тест (чтобы он работал быстрее и не нужно было запускать приложение в первую очередь):

  • перейдите к настройкам сборки для unit test target
  • поиск Bundle
  • удалить загрузчик пакетов и тестовый хост

enter image description here

Ответ 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.

enter image description here

Постарайтесь выбрать None из раскрывающегося списка цели.

Specify new test target

Нажмите "Готово". Добавьте соответствующие файлы в новую цель, как описано выше.

Теперь создайте схему для запуска теста.

Выберите схему выбора справа вверху и выберите New Scheme..., щелкните раскрывающийся список и перейдите вниз по списку к новой цели. Теперь вы можете выбрать схему из схемы выбора и использовать ⌘U для запуска тестов.

enter image description here

Ответ 6

Я просто потерял утро на этом.

Проект был создан в XCode 4 и использовался SenTesting.

Протестировано тестирование миграции на XCode 5/XCTTest

Если бы такая же проблема - приложение запускалось в симуляторе, и тест никогда не начинался после того, как вы попробуете все (смените приложение на логические тесты, перейдите в XCTest, удалите SenTesting)

отказался от создания чистого проекта XCode 5.

Добавлены все мои файлы и тесты прошли нормально.

По-прежнему могут возникать проблемы с Storyboard, поскольку они были созданы с XCode 4.

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

Ответ 7

В XCode5 приложение запускается. Этот ответ показывает, как изменить свой делегат при выполнении модульных тестов, чтобы он сразу же удалялся: fooobar.com/info/124683/...