Vraag Xcode 4.5 testen van opdrachtregeleenheden


Een probleem ondervinden sinds het updaten naar Xcode 4.5 bij het uitvoeren van mijn unit-tests via de opdrachtregel. Het volgende is de uitvoer die ik zie wanneer ik mijn tests probeer uit te voeren

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'

Hoewel het zegt dat de tests zijn geslaagd en voltooid, denk ik niet dat ze daadwerkelijk zijn uitgevoerd.

Ik gebruik de volgende opdracht om de tests uit te voeren xcodebuild -workspace MyApp.xcworkspace -scheme MyAppTests -sdk iphonesimulator -configuratie Debug clean build TEST_AFTER_BUILD = YES

Heeft iemand hetzelfde probleem tegengekomen en kan het een oplossing bieden?


36
2017-09-24 01:50


oorsprong


antwoorden:


Ik dacht dat ik ook zou moeten delen wat ik heb gedaan voor een oplossing voor dit probleem. Ik volgde de oplossing die wordt beschreven in https://stackoverflow.com/a/10823483/666943 maar converteerde het ruby-script naar shell. Aan het einde heb ik in principe geïnstalleerd ios-sim via homebrew en vervang de Run Script in de Build Phases van mijn testdoel met het volgende:

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

Om de test nu te starten geef ik het argument door RUN_UNIT_TEST_WITH_IOS_SIM=YES bijv.

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

29
2017-10-01 23:40



Ik heb dit probleem opgemerkt in de bètaversies van Xcode 4.5 / iOS 6. Ik heb gewerkt aan een testloper met alleenstaande eenheden om dit probleem te omzeilen. Het werkt door uw eenheidstestbundel te compileren en vervolgens een versie van uw app te compileren die automatisch de eenheidstests uitvoert in een simulatoromgeving.

De tool is zeker niet compleet, maar genoeg mensen lijken dit probleem te hebben dat ik de tool vrijgeef zoals het nu is. Vork of becommentarieer, zodat ik de tool kan verbeteren.

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

Houd deze radar ook in de gaten op dit probleem http://openradar.appspot.com/12306879


9
2017-09-28 10:15



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

Het instellen van de iphonesimulator op versie 5.1 lijkt het probleem op te lossen. Er zijn radar bugs gevuld met dit probleem.

Dit artikel noemt ook een goede oplossing om te volgen:

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


6
2017-09-29 19:37



Er is ook een kleine hack die kan helpen om opdrachtregelproeven uit te voeren op de iOS6.0-simulator-SDK

Ik gebruik Cedar en deze aanpassing heeft mij geholpen:

Eerst moet u uw updaten hoofd bestand een beetje:

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

Ten tweede moet u een categorie aan UIWindow toevoegen:

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

Ceder Hoofdstuk toets werkt prima, met enkele runtime-waarschuwingen, maar ze kunnen in ieder geval worden uitgevoerd :)


2
2018-01-18 09:27