2013-11-27 73 views
19

我正在尝试使用iOS测试用例的命令行构建和运行测试用例。 我已经给下面的命令:无法通过xcodebuild从命令行执行测试

xcodebuild -target AppEngineTests -configuration Debug -sdk iphonesimulator TEST_AFTER_BUILD=YES clean build 

它构建的应用程序,但该测试用例都无法运行。

有人可以帮忙吗? 谢谢

+0

你收到了什么错误信息? – ULazdins

回答

17

我发现name属性需要更多的规格。

xcodebuild test -workspace #{WORKSPACE_FILE} -scheme #{TEST_SCHEME} -destination 'platform=iOS Simulator,name=iPhone Retina (4-inch),OS=7.0' 

终于为我工作了。 iPhone是有限和/或不可预知的。

作为另一张海报(无法找到引用)提到,'平台'松散地对应于目标列表中的分隔符,'名称'对应于子选择,并且OS参数对应于右侧在相同列表中减去'iOS'的雪佛龙。

不幸的是,该文档具有启发性,并且听起来具有权威性,但实际上没有完整或正确。

惊人的是这是一个麻烦。一旦实现正确的调用,它的工作效果如何。

+0

感谢您的编辑,Guillaume,但我在多行上有它,因为它需要滚动才能读取! – tooluser

+0

如何构建真实设备 –

+0

这是“目标”参数@QadirHussain可用的值之一。 – tooluser

12

你还没有说过你正在使用的Xcode的版本,但既然你用“xctest”标记了你的问题,假设你有Xcode 5或更高版本似乎是安全的。

Xcode 5通过test动词显着增强了在xcodebuild中运行测试的支持。在使用此动词时,您需要指定方案目标而不是目标,因为它的行为与Xcode IDE中的“测试”命令类似。

因此,例如,假设你有你的项目或工作组名为AppEngine上有它的测试方案的行动正确配置共享的方案,你就可以只使用

xcodebuild test -scheme AppEngine -destination 'platform=iOS Simulator,name=iPad' 

运行所有单元的为配置为运行最新iOS的iPad的iOS模拟器中的AppEngine方案配置的测试。有关目标说明符语法的更多详细信息,请参阅xcodebuild man page。 (您甚至可以使用它来在附加的iOS设备上运行测试!)

以前用于运行单元测试的脚本已调整为将用户引用到test动词,而不是因为通过这些改进,每个人都应该使用。

+1

5表示目标语法给出:xcodebuild:error:选项'Destination'需要至少一个'key = value'形式的参数。你的意思是'平台= iOS模拟器,名称= iPad'? –

+0

是的,我已经更新了答案。 –

+0

我发现这只是测试构建,并没有运行单元测试。尝试了xcodebuild测试和xcodebuild 测试...没有运气。 –

0

我有一个Xcode构建类似的问题。在我的情况下,问题是我没有任何与我的方案相关的测试。

请参阅我的SO(图带)here

0

降落在这里寻找类似xcodebuild联编的错误的决议回答。如同附录一样,你也可以传递一个key = val到-destination,例如-destination 'platform=iOS',xcodebuild会告诉你所有可用的方案。

λ ~/Development/app-ios/ task/JIOS-400-Earl-Grey-Spike* xcodebuild -workspace app.xcworkspace -scheme app -destination 'platform=iOS' -derivedDataPath "build" build-for-testing 

User defaults from command line: 
    IDEDerivedDataPathOverride = /Users/schoudhary/Development/app-ios/build 

xcodebuild: error: Unable to find a destination matching the provided destination specifier: 
     { platform:iOS } 

    Missing required device specifier option. 
    The device type “Generic iOS Device” requires that either “name” or “id” be specified. 
    Please supply either “name” or “id”. 

    Available destinations for the "App" scheme: 
     { platform:iOS Simulator, id:D248DB01-A852-4360-A9C0-2D71AFE478D7, OS:10.3, name:iPad Air } 
     { platform:iOS Simulator, id:CE87AF5A-141C-43DA-AE61-AF53593F37F7, OS:10.3, name:iPad Air 2 } 
     { platform:iOS Simulator, id:E93B43E4-D24E-4927-B9EE-0375E15DCBD5, OS:10.3, name:iPad Pro (9.7 inch) } 
     { platform:iOS Simulator, id:6D71DB17-0FE2-4D5E-BEE6-CC696445BA11, OS:10.3, name:iPad Pro (12.9 inch) } 
     { platform:iOS Simulator, id:F7E37EF4-5E72-438A-A286-216C20158B47, OS:10.3, name:iPhone 5 } 
     { platform:iOS Simulator, id:24653844-AE99-4B5B-8332-9FFD2208172F, OS:10.3, name:iPhone 5s } 
     { platform:iOS Simulator, id:FD2089A4-BF3F-4F98-8E33-B7EFDCFE5B4D, OS:10.3, name:iPhone 6 } 
     { platform:iOS Simulator, id:6EF0DFBD-E99E-4EB3-9C51-6E749F41B6E7, OS:10.3, name:iPhone 6 Plus } 
     { platform:iOS Simulator, id:846E631C-6285-4B91-9BA6-1AB6E66C88DB, OS:10.3, name:iPhone 6s } 
     { platform:iOS Simulator, id:A6943ADC-F6EF-42F6-9958-D966DFC419FC, OS:10.3, name:iPhone 6s Plus } 
     { platform:iOS Simulator, id:B41ABED0-7554-438A-97AC-F34943ED4D79, OS:10.3, name:iPhone 7 } 
     { platform:iOS Simulator, id:20F1582C-0D19-4F42-9DAD-43138FB923B9, OS:10.3, name:iPhone 7 Plus } 
     { platform:iOS Simulator, id:683BB5CA-E0A8-4CE4-B0DD-AED4C4295B90, OS:10.3, name:iPhone SE } 

    Ineligible destinations for the "App" scheme: 
     { platform:iOS, id:dvtdevice-DVTiPhonePlaceholder-iphoneos:placeholder, name:Generic iOS Device } 
     { platform:iOS Simulator, id:dvtdevice-DVTiOSDeviceSimulatorPlaceholder-iphonesimulator:placeholder, name:Generic iOS Simulator Device } 

只是另一种有用的方法来获得正确的目的地。

1

需要注意的是,您可以使用instruments -s devices来获取所有可用设备的列表。

由于某种原因,您还应该将字符串作为-destination 'platform=iOS Simulator,id=ID_OF_THE_SIMULATOR'传递,它不喜欢键=值对之间的空格。