Xcode / iOS:单元测试、方案和配置

Posted

技术标签:

【中文标题】Xcode / iOS:单元测试、方案和配置【英文标题】:Xcode / iOS: Unit Tests, Schemes, and Configurations 【发布时间】:2013-03-06 19:32:20 【问题描述】:

我的 ios 项目有五个方案:本地开发、集成、QA、演示和生产。每个方案都使用不同的配置来控制网络轮询频率、API 端点、分析等。

同样,我们有五个相应的目标:本地开发、集成、QA、演示和生产。每个目标都有几个用户定义的构建设置,其中包含 API 密钥、计时数值等。

我们应用程序的Info.plist 文件使用$SOME_ENDPOINT_URL 等应用程序变量来绘制相应的用户定义的构建设置。

要检索变量,我执行以下操作:

[[[NSBundle mainBundle] infoDictionary] valueForKey:@"Some Endpoint URL"]

这将对应于用户定义的构建设置,如下所示:

"Some Endpoint URL" = $SOME_ENDPOINT_URL

我现在正在研究如何适当地配置项目以执行单元和逻辑测试。

要构建测试以确定环境是否配置正确,我不确定最佳做法是什么。

为每个环境额外构建五个特定于测试的目标是否正确? 或者最好覆盖每个方案的测试组件的“运行操作的参数”设置,并提供类似参数的东西来指定我们正在查看的方案? 是否有任何现有的参考资料可以为具有多个环境的 iOS 项目配置单元和逻辑测试?这个项目的复杂性似乎超出了大多数文档的范围。

【问题讨论】:

Apple 一直在对整个 Targets/Schemes 系统进行非向后兼容的更改 - 我认为您没有找到文档的原因是 Apple 打算/期望在未来进行更多此类更改,并且希望躲开他们将收到的高炮。 Apple 的某个人似乎特别讨厌 Targets,所以我个人会采用“使用参数”的方法 - Targets 可能会被削弱(再次:()。 与其有这么多不同的目标,为什么不只有一个目标,五种配置呢?您将拥有 LocalDev、Integ、QA、Demo、Prod,而不是 Debug 和 Release。然后,您可以创建五个构建相同目标但配置不同的方案。 @JacobLukas 你知道你所描述的一个很好的教程吗?我一直避免使用方案,但听起来它们真的很有用。 这里是如何在 Xcode 中创建配置的链接:developer.apple.com/library/mac/recipes/… 目标和方案是当今的首选方式,而不是使用不同的配置。很多事情都依赖于调试和发布配置——不要走那条路,你的日子不好过。 @Kevin - 为什么需要测试每个目标?我有类似的设置,但仅在开发/内部目标上进行单元测试,因为测试其他目标将是多余的。 【参考方案1】:

以下是我的工作。

Info.plist

创建一个主 Info.plist 文件 为每个方案编写一个运行脚本(Shell 脚本),通过修改主 Info.plist 中的设置来生成特定于环境的 Info.plist(使用 PlistBuddy -c) 将运行脚本添加到构建阶段(在“编译源”上方)

.h 文件

在 .h 文件中定义配置设置(例如 config.h)

#if defined (CONFIG_FILE) 
#import CONFIG_FILE
#endif

在代码中导入 config.h

为每个方案使用预处理器宏来选择目标 .h 文件。

-DCONFIG_FILE=local-env-config.h

【讨论】:

以上是关于Xcode / iOS:单元测试、方案和配置的主要内容,如果未能解决你的问题,请参考以下文章

在 Xcode 中运行 iOS 单元测试时引用 _main 的链接器错误

IDEA单元测 试控制台不能输入数据 解决方案

如何使用 Xcode 4 运行单元测试的子集

iOS 单元测试- Xcode 7测试工具XCTest学习

IOS-使用XCODE自带的单元测试UnitTest

Xcode 11 单元测试:未列出装有 iOS 12.* 的设备