如何在共享框架中为XCTest创建公共扩展?

时间:2016-07-21 03:41:50

标签: swift xctest

例如,我从不使用XCTestCase.expectation的描述,因此我想使用函数为其提供默认值,并通过命名我明确初始化期望,因为你不能真正使用XCTestExpectation的初始值设定项。但是如果扩展不在测试目标中,那么就无法编译:

  

无法加载' XCTest'

的基础模块
import XCTest

public extension XCTestCase {
    func makeExpectation() -> XCTestExpectation {
        return expectation(withDescription: "")
    }
}

1 个答案:

答案 0 :(得分:8)

我在这里创建了一个xcworkspace(https://github.com/dtweston/TestFrameworkSample),它可以解决您的问题。此工作空间中有两个项目:

  1. 具有iOS应用目标和单元测试目标的SampleApp项目。
  2. SharedTestFramework项目,它导入XCTest并声明您在问题中添加的单个扩展名。
  3. SampleAppTests目标链接到SharedTestFramework,以便能够使用它定义的扩展。单个测试文件导入SharedTestFramework。

    通过这些步骤,我在构建SharedTestFramework时也会遇到Cannot load underlying module for 'XCTest'

    此修复方法是更新Framework Search Paths以包含"$(PLATFORM_DIR)/Developer/Library/Frameworks"。现在,SharedTestFramework正确编译,正如您在我上传的工作区中看到的那样,SampleAppTests目标能够成功使用它。

    陈旧且错误的答案

    您是否正在构建一个旨在导入测试目标的单独框架?如果是这种情况,那么我认为您只需要参考您正在构建的自定义框架中的XCTest.framework

    另一方面,如果您尝试将此扩展程序添加到应用程序目标使用的框架中,这似乎是一个坏主意,因为这意味着将XCTest.framework链接到二进制文件进入商店并在人们的设备上运行。

    我不确定这是否可行。我更有信心这不是Apple期望或支持的方案。

相关问题