8

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

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

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

我怎样才能有一个针对静态库的 XCTest 链接?

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

4

2 回答 2

11

如果您使用的是 cocoapods,您可以简单地使用link_with来包含您的测试目标,但如果您使用的是不是由 cocoapods 创建的静态库,您可以执行以下操作:

(我仍然会使用 cocoapods 库作为说明,因为这就是我正在使用的,但是如果你不使用 cocoapods 库,这个想法是一样的)

创建新的测试目标后,单击项目导航器中的项目根节点并选择您的测试目标。转到Build Settings并搜索Header Search Paths。双击该Header Search Paths项目并输入 ${SRCROOT}/Pods/Headers并选择recursive是否要导入所有 cocoapods 库标题或单独输入它们: ${SRCROOT}/Pods/Headers/MagicalRecord保持non-recursive选中状态(尽管在这种情况下并不重要)。

现在搜索LinkingOther Linker Flags添加-ObjC

现在仍然选择您的测试目标,转到Build PhasesLink Binary With Libraries单击+并单独添加libPods.a或其他库(libPods-MagicalRecord.a

您应该能够使用静态库运行 XCTest。

可选:我喜欢导入我知道将在 -Prefix.pch 文件中使用的标头。您可以在 Project Navigator 中转到您的目标测试组。转到Supporting Files组并打开-Prefix.pch文件。对于 MagicalRecord,我想添加:

#define MR_SHORTHAND
#import "CoreData+MagicalRecord.h"

了解更多信息:

于 2013-09-07T21:11:34.067 回答
0

经过大量的战斗,这些步骤对我有用:

1)项目>信息

在配置上,将测试目标设置为与主项目(由 Cocoapods 生成)共享相同的配置文件。

在此处输入图像描述

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

2)在测试目标>构建设置上查找标题搜索路径,一旦添加:

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

单元测试框架位于您的 Xcode 应用程序中,此标头将公开它们以供以后添加。

3) 在 Test Target> Build Phases 添加 SenTestingKit.framework

在此处输入图像描述

它应该看起来像这样

在此处输入图像描述

从那里开始,一切似乎都对我有用。祝你好运。

于 2015-02-06T19:19:28.987 回答