20

我正在尝试使用 iOS 测试用例的命令行构建和运行测试用例。我给出了以下命令:

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

它构建了应用程序,但没有运行测试用例。

有人可以帮忙吗?谢谢

4

5 回答 5

18

我发现该name属性需要更多规范。

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

最终对我有用。iPhone是有限的和/或不可预测的。

正如另一张海报(找不到引用)提到的,“平台”松散地对应于目标列表中的分隔符,“名称”对应于子选择,OS参数对应于人字形的右侧相同的列表减去“iOS”。

不幸的是,该文档具有暗示性,乍一看听起来很权威,但实际上并不完整或正确。

令人惊讶的是这是多么麻烦。一旦实现了正确的调用,它的效果如何。

于 2014-03-11T22:06:09.147 回答
12

您还没有说您使用的是哪个版本的 Xcode,但是由于您用“xctest”标记了您的问题,因此假设您拥有 Xcode 5 或更高版本似乎是安全的。

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

因此,例如,假设您的项目或工作区中有一个名为 AppEngine 的共享方案,其测试方案操作已正确配置,您可以只使用

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

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

以前用于运行单元测试的脚本已经过调整,以将用户test引向动词,因为有了这些改进,每个人都应该使用它。

于 2013-12-02T04:42:30.417 回答
2

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

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

于 2017-07-28T03:23:18.663 回答
0

我在 Xcode 构建中遇到了类似的问题。就我而言,问题是我没有与我的计划相关的任何测试。

在此处查看我的 SO 答案(带图表)

于 2016-03-18T18:51:51.383 回答
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 }

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

于 2017-05-30T06:29:59.427 回答