如何在 Xcode 7 中动态更改单元测试的目标?

Posted

技术标签:

【中文标题】如何在 Xcode 7 中动态更改单元测试的目标?【英文标题】:How to dynamically change target for unit tests in Xcode 7? 【发布时间】:2015-12-30 22:54:38 【问题描述】:

我有一个项目,它有多个不同的目标/方案(在撰写本问题时大约有 38 个),我正在尝试让单元测试在所有不同的目标上正常工作。我让事情与一个目标一起工作,并尝试将我的测试目标添加到所有不同的方案中,但看起来当为每个方案运行测试时,它们实际上在相同的原始目标上运行。

查看项目文件,我发现有一个特定的主机应用程序与我的测试目标相关联,并且在构建设置中,Bundle Loader 和测试主机指向同一个主机应用程序。

是否有任何方法可以覆盖每个方案的这些值以针对当前方案的构建目标运行测试?或者通过其他方式设置单个测试目标以跨多个构建目标运行?

【问题讨论】:

【参考方案1】:

如果您从命令行或 CI 工具(如 Jenkins)运行测试,您可以指示 xcodebuild 使用您提供的构建设置。一个简单的用法示例是:

xcodebuild -scheme SomeScheme test TEST_HOST=target

您可以从 Xcode 控制几乎(如果没有的话)构建设置,例如代码覆盖率生成、构建目录、派生数据目录、代码签名标识等。

【讨论】:

太棒了,这正是我正在寻找的东西。谢谢!【参考方案2】:

您可以在使用 Xcode 服务器运行测试时选择方案。

查看 WWDC 2014 继续集成讨论,了解如何设置它

https://developer.apple.com/videos/play/wwdc2014-415/

它使用的是 Xcode 6,但过程与 Xcode 7 非常相似

还可以查看 Apple 提供的此 CI(继续集成)指南 https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/xcode_guide-continuous_integration/adopt_continuous_integration.html

【讨论】:

如果你能写出相关的视频时间片刻那就太好了。 :)【参考方案3】:

如果有人想知道如何使用 UI 测试来做到这一点(也许它也在使用单元测试),这就是我想出的:

    首先,我们需要构建将用于托管 UI 测试的应用程序:

xcodebuild -scheme "<appSchemeName>" build -destination "<yourDestination>"

关于目标参数的更多信息:https://mokacoding.com/blog/xcodebuild-destination-options/

    然后,我们需要在我们新建的应用程序上运行测试:

xcodebuild -scheme "<uiTestsSchemeName>" -destination "<yourDestination>" test TEST_TARGET_NAME="<yourNewlyBuiltAppTargetName>"

目标应该匹配,因为在您的 DerivedData 文件夹中生成构建 .app 后,该文件夹将用于 UI 测试托管应用程序

【讨论】:

以上是关于如何在 Xcode 7 中动态更改单元测试的目标?的主要内容,如果未能解决你的问题,请参考以下文章

如何在现有的 ios 测试项目中启用 xcode 7 UI 测试

如何在 XCode4 中运行单元测试而无需切换到 UnitTest 配置文件/目标?

如何在 Xcode 4.5“命令行工具”项目中设置工作逻辑单元测试目标?

Xcode 7.2:无法在 iPhone 6s 上运行单元测试

如何在静态库项目中使用 XCode 性能工具?

如何使用 Xcode 7 UI 测试检查表格视图中的单元格是不是可见?