使用静态库进行单元测试

Posted

技术标签:

【中文标题】使用静态库进行单元测试【英文标题】:Unit Testing in With A Static Library 【发布时间】:2012-05-16 04:27:32 【问题描述】:

我有一个带有用户界面项目 (UI) 和核心逻辑项目 (Core) 的 XCode 工作区。我想在 UI 项目中进行 OCUnit 单元测试,所以我添加了一个新的测试目标,就像通常所做的那样。

我能够很好地运行测试,直到我为主 UI 目标中的类添加导入语句,而这些类又引用了 Core 项目。

我得到的错误是“找不到词法或预处理器问题 'xxx.h' 文件”。当我直接构建主 UI 目标时,我没有收到此消息。

就好像主 UI 目标在构建时知道 Core,但是当从测试目标中引用它时,它似乎对 Core 一无所知。

我采取了使用“将二进制文件与库链接”添加对核心项目的引用的步骤,列表中的项目仍为红色。线索?也许吧,但链接列表中的红色引用并没有阻止 UI 目标构建和使用核心类。我还将主要目标作为测试目标的依赖项。

【问题讨论】:

【参考方案1】:

请务必查看 Apple 示例代码“单元测试”: https://developer.apple.com/library/ios/#samplecode/UnitTests/Introduction/Intro.html#//apple_ref/doc/uid/DTS40011742

确保您的库项目在您的 OCUnit 测试目标的构建阶段设置为依赖项,并将其链接为库。

在 Xcode 中打开您的项目。在文件菜单中,转到项目设置...(或工作空间设置...,如果您使用的是工作空间)。单击 Advanced... 并确保选中 Unique。清理并重建。

检查您的 BUILD_PRODUCTS_DIR 以查看您的库的标题是否显示在其中。如果没有,请首先检查库目标中的构建阶段,以确保您需要的标头位于 Public 部分(Project 部分也可以工作,但请尝试 Public 看看是否能解决您的问题)。

这涵盖了人们在您的情况下似乎遇到的最常见问题。如有疑问,请对照您的检查 UnitTests 示例中的目标设置。祝你好运!

【讨论】:

【参考方案2】:

除了 Jon Reid 的回答之外,我还必须执行以下操作: 在您的测试目标中,转到构建设置。将“始终搜索用户路径”设置为“是”

【讨论】:

【参考方案3】:

在您的测试目标中,转到构建设置。将静态库标题的路径添加到标题搜索路径。

【讨论】:

以上是关于使用静态库进行单元测试的主要内容,如果未能解决你的问题,请参考以下文章

使用 OCMock 静态库进行 iOS 单元测试(-ObjC 标志问题)

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

涉及 NSDocumentDirectory 和其他 iOS App 特定调用的静态库的单元测试

在单元测试静态库(不是应用程序)时编写日志文件?

使用 Objective-C++ 时单元测试未解析的符号

使用方法内的静态调用设计Java单元测试