如何在XCTest中使用静态库(例如CocoaPods库)?

8

我正在使用Core Data,随着模型变得更加复杂,我需要确保我引入的新更改不会意外地破坏我的模型其他部分。

我可以创建单元测试,并在每次更改模型时运行它们。如果出现错误,则可能是我的模型有问题,或者至少我知道我必须修改主代码/测试中的某些查询。

我使用MagicalRecord来访问一些方便的方法。 我还使用cocoapods出于同样的原因,即方便。 问题在于cocoapods创建了一个静态库,并将其与我的目标链接,但在Xcode中,新的测试目标没有自动配置以链接到与相关目标链接的相同库/框架。

如何使XCTest链接到静态库?

这不仅对MagicalRecord/Core Data有用,而且当您使用外部库时,最好进行测试,以确保库的更新不会破坏您的应用程序。

2个回答

11
如果你正在使用cocoapods,你可以简单地使用link_with来包含你的测试目标,但如果你使用的是非cocoapods创建的静态库,则可以执行以下操作:
(在这里我仍将使用cocoapods库进行说明,因为这是我正在使用的内容,但如果你没有使用cocoapods库,思路相同。)
一旦你创建了一个新的测试目标,请单击项目导航器中的项目根节点并选择你的测试目标。 转到Build Settings并搜索Header Search Paths。双击Header Search Paths项目并输入${SRCROOT}/Pods/Headers,如果您想要导入所有的cocoapods库头文件,选择recursive,或者逐个添加它们: ${SRCROOT}/Pods/Headers/MagicalRecord并选择non-recursive(虽然在这种情况下没有太大关系)。
现在搜索Linking,并在Other Linker Flags中添加-ObjC
现在,仍然选择你的测试目标,转到Build Phases,并在Link Binary With Libraries中单击+,添加libPods.a或其他库(例如libPods-MagicalRecord.a)。
现在,你应该能够使用静态库运行XCTest。
可选:我喜欢在-Prefix.pch文件中导入我知道将要使用的头文件。你可以进入项目导航器中的目标测试组。转到Supporting Files组,并打开-Prefix.pch文件。对于MagicalRecord,我喜欢添加:
#define MR_SHORTHAND
#import "CoreData+MagicalRecord.h"

了解更多信息:


0
经过一番努力,以下步骤对我有用:
1)项目>信息
在配置中,将测试目标设置为与您的主项目共享相同的配置文件(由Cocoapods生成)。

enter image description here

现在,你应该开始出现一些错误,因为XCUnit框架缺失,但是现在你使用CocoaPod导入的外部库已经在测试项目中可见。

2)在测试目标>构建设置中查找头文件搜索路径,在此处添加:

$(DEVELOPER_DIR)/Platforms/iPhoneOS.platform/Developer/Library/Frameworks
$(DEVELOPER_DIR)/Platforms/iPhoneSimulator.platform/Developer/Library/Frameworks

单元测试框架位于您的Xcode应用程序中,这些头文件将使它们公开以供稍后添加。

3)在测试目标>构建阶段中添加SenTestingKit.framework

enter image description here

它应该看起来像这样

enter image description here

从那里开始,一切对我来说似乎都很顺利。祝你好运。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接