iOS 单元/应用程序测试目标如何链接到其宿主应用程序中的类?

Posted

技术标签:

【中文标题】iOS 单元/应用程序测试目标如何链接到其宿主应用程序中的类?【英文标题】:How do iOS Unit/Application-Test targets link against classes from their host app? 【发布时间】:2018-11-07 16:52:35 【问题描述】:

我目前正在尝试将单元测试(准确地说是应用程序测试)添加到我的应用程序(一个非常古老的项目.. 评论说 ios 2.0)并且当我尝试测试课程时总是偶然发现undefined symbols for architecture,这是在我的主机应用程序中。由于明显的修复还没有奏效,我想深入了解整个过程。如果有人能提供一些启示,将不胜感激:)

根据我目前收集到的信息:

单元测试目标需要一个宿主应用程序。这在“TEST_HOST”中指定。此外,它也在 BUNDLE_LOADER 中指定。

测试目标需要提供符号。所以“Strip Debug Symbols during Copy”应该是NO。

需要启用要测试的目标才能测试“启用可测试性”= YES

有些人需要将部署后处理设置为 NO

在 testtarget 中,hostapp 应该“允许测试主机应用程序 API”

当链接器链接测试文件时,它会在某处(指定此路径的确切位置)搜索来自主机应用程序的目标文件和符号。然后在链接成功后,它将单元测试“插件”部署到应用程序插件文件夹中并开始测试。

如您所见,这是一个相当粗略的理解。因此,如果您能添加细节(无论多么微不足道),我将非常感激。

【问题讨论】:

【参考方案1】:

我刚刚意识到我还没有回答这个问题......

在我的情况下,丢失的符号是编译库的结果,可见性设置为隐藏。如果是这种情况,则测试无法找到符号,因为 lib 没有向公众提供它们。更改用于测试的编译命令以将可见性设置为默认值会有所不同。

【讨论】:

以上是关于iOS 单元/应用程序测试目标如何链接到其宿主应用程序中的类?的主要内容,如果未能解决你的问题,请参考以下文章

如何为iOS工作区运行所有单元测试?

iOS 应用程序的 Xcode 单元测试中的链接问题与嵌入式 C++ 代码

iOS - 从发布版本中排除测试文件

iOS 单元测试通用应用程序

Xcode:如何测试主包 .plist 文件内容?

如何在 CMake 中构建过程后复制目标的所有运行时依赖项?