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

Тестирование блока командной строки Xcode 4.5

Наличие проблемы с момента обновления до Xcode 4.5 при выполнении моих модульных тестов через командную строку. Ниже приводится вывод, который я вижу, когда пытаюсь запустить мои тесты.

Unknown Device Type. Using UIUserInterfaceIdiomPad based on screen size
Terminating since there is no workspace.
/Applications/Xcode.app/Contents/Developer/Tools/RunPlatformUnitTests.include:334: note: Passed tests for architecture 'i386' (GC OFF)

/Applications/Xcode.app/Contents/Developer/Tools/RunPlatformUnitTests.include:345: note: Completed tests for architectures 'i386'

Несмотря на то, что он говорит, что тесты прошли и завершились, я не думаю, что они действительно были запущены.

Я использую следующую команду для запуска тестов xcodebuild -workspace MyApp.xcworkspace -scheme MyAppTests -sdk iphonesimulator -configuration Отладка чистой сборки TEST_AFTER_BUILD = YES

Кто-нибудь сталкивается с той же проблемой и может предложить решение?

4b9b3361

Ответ 1

Просто подумал, что я должен поделиться тем, что я сделал для решения этой проблемы. Я выполнил решение, описанное в fooobar.com/questions/116294/..., но преобразовал ruby ​​script в оболочку. В конце я в основном установил ios-sim через homebrew и заменил Run Script в Build Phases моей тестовой цели следующим образом:

if [ "$RUN_UNIT_TEST_WITH_IOS_SIM" = "YES" ]; then
    test_bundle_path="$BUILT_PRODUCTS_DIR/$PRODUCT_NAME.$WRAPPER_EXTENSION"
    ios-sim launch "$(dirname "$TEST_HOST")" --setenv DYLD_INSERT_LIBRARIES=/../../Library/PrivateFrameworks/IDEBundleInjection.framework/IDEBundleInjection --setenv XCInjectBundle="$test_bundle_path" --setenv XCInjectBundleInto="$TEST_HOST" --args -SenTest All "$test_bundle_path"
    echo "Finished running tests with ios-sim"
else
    "${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests"
fi

Чтобы начать тест, я передаю аргумент RUN_UNIT_TEST_WITH_IOS_SIM=YES например.

xcodebuild -workspace MyApp.xcworkspace -scheme MyAppTests -sdk iphonesimulator -configuration Debug clean build RUN_UNIT_TEST_WITH_IOS_SIM=YES

Ответ 2

Я заметил эту проблему в бета-версиях Xcode 4.5/iOS 6. Я работал над автономным модульным тестировщиком, чтобы обойти эту проблему. Он работает путем компиляции вашего пакета unit test, а затем компиляции версии вашего приложения, которая автоматически запускает модульные тесты в среде симулятора.

Инструмент отнюдь не является полным, но у достаточного количества людей, похоже, есть эта проблема, что я выпускаю инструмент так, как сейчас. Пожалуйста, вилку или комментарий, чтобы я мог улучшить инструмент.

xcodetest: https://github.com/sgleadow/xcodetest

Также следите за этим радаром по проблеме http://openradar.appspot.com/12306879

Ответ 3

xcodebuild -project ${PROJECT_PATH}/${PROJECT_NAME}.xcodeproj \ -scheme ${TEST_SCHEME} \ -configuration Debug \ -sdk iphonesimulator5.1 \ clean build \ TEST_AFTER_BUILD=YES

Настройка iphonesimulator к версии 5.1, похоже, решает проблему. На эту проблему попали радиолокационные ошибки.

В этой статье также упоминается хорошее решение:

http://baolei.tumblr.com/post/32428168156/ios-unit-test-from-command-line-ios6-xcode4-5

Ответ 4

Также есть небольшой взлом, который может помочь запустить тесты командной строки на iOS6.0 simulator SDK

Я использую кедр, и эта настройка помогла мне:

Сначала вам нужно немного обновить файл main:

  // Faking up that workspace port
  CFMessagePortCreateLocal(NULL, (CFStringRef) @"PurpleWorkspacePort", NULL, NULL,NULL);
  return UIApplicationMain(argc, argv, nil, @"CedarApplicationDelegate");

Во-вторых, вам нужно добавить категорию в UIWindow:

@implementation UIWindow (Private)
- (void)_createContext {
   // Doing nothing here. Just for crash avoidance
}
@end

Cedar Unittest будет работать нормально, с некоторыми предупреждениями во время выполнения, но, по крайней мере, они смогут запускать:)