Xcode 4.5 Testowanie jednostek wiersza poleceń

Problem z aktualizacją do Xcode 4.5 podczas uruchamiania testów jednostkowych za pomocą wiersza poleceń. Poniżej znajduje się wynik, który widzę, gdy próbuję uruchomić moje testy

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'

Mimo, że mówi, że testy przeszły i zakończyły się, nie sądzę, aby zostały przeprowadzone.

Do uruchomienia testów używam następującego polecenia xcodebuild-workspace MyApp.xcworkspace-scheme MyAppTests-sdk iphonesimulator-configuration debug clean build TEST_AFTER_BUILD=YES

Czy ktoś napotkał ten sam problem i może zaproponować rozwiązanie?

Author: Josh Caswell, 2012-09-24

4 answers

Pomyślałem, że powinienem również podzielić się tym, co zrobiłem, aby rozwiązać ten problem. Zastosowałem rozwiązanie opisane w https://stackoverflow.com/a/10823483/666943 ale przekonwertował skrypt ruby do powłoki. Na koniec zainstalowałem ios-sim przez homebrew i zamieniłem Run Script w Build Phases mojego testowego celu na:

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

Aby rozpocząć test teraz zdaję w argumencie RUN_UNIT_TEST_WITH_IOS_SIM=YES np.

xcodebuild -workspace MyApp.xcworkspace -scheme MyAppTests -sdk iphonesimulator -configuration Debug clean build RUN_UNIT_TEST_WITH_IOS_SIM=YES
 29
Author: Edward Huynh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:22:58

Zauważyłem ten problem w wersji beta Xcode 4.5 / iOS 6. Pracowałem nad samodzielnym biegaczem testów jednostkowych, aby obejść ten problem. Działa to poprzez kompilację pakietu testów jednostkowych, a następnie kompilację wersji aplikacji, która automatycznie uruchamia testy jednostkowe w środowisku symulatora.

Narzędzie bynajmniej nie jest kompletne, ale wydaje się, że wystarczająco dużo osób ma ten problem, że wypuszczam narzędzie tak, jak jest na razie. Proszę widelec lub komentarz, więc mogę poprawić narzędzie.

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

Również miej oko na ten radar w sprawie http://openradar.appspot.com/12306879

 9
Author: Stew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-28 10:15:53

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

Ustawienie iphonesimulatora na wersję 5.1 wydaje się rozwiązywać problem. W tej kwestii są wypełnione błędy radarowe.

Ten artykuł również wspomnieć dobre rozwiązanie do naśladowania:

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

 6
Author: Victor Lima,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-29 20:36:49

Jest też mały hack, który może pomóc w uruchomieniu testów wiersza poleceń na iOS6.0 simulator SDK

Używam cedru i ten tweak mi pomógł:

Najpierw musisz trochę zaktualizować swój main Plik:

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

Po drugie, musisz dodać kategorię do UIWindow:

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

Cedar Unittest będzie działać dobrze, z pewnymi ostrzeżeniami runtime, ale przynajmniej będą mogły działać:)

 2
Author: tt.Kilew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-18 09:27:32