【问题标题】:How to use a static library (e.g. cocoapods library) on a XCTest?如何在 XCTest 上使用静态库(例如 cocoapods 库)?
【发布时间】:2013-09-11 17:52:43
【问题描述】:

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

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

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

如何获得针对静态库的 XCTest 链接?

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

【问题讨论】:

    标签: ios objective-c xcode magicalrecord cocoapods


    【解决方案1】:

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

    1) 项目> 信息

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

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

    2) 在 Test Target>Build Settings 中查找 Header Search Paths,然后添加:

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

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

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

    它应该看起来像这样

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

    【讨论】:

      【解决方案2】:

      如果您使用的是 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(尽管在这种情况下它并不重要)。

      现在搜索Linking 并在Other Linker Flags 添加-ObjC

      现在您的测试目标仍处于选中状态,转到 Build Phases 并在 Link 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"
      

      更多信息:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-10
        • 1970-01-01
        • 2021-03-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多