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

Jes*_*ssy 13 xctest swift

例如,我从不使用描述XCTestCase.expectation,所以我想使用一个函数为它提供一个默认值,并通过命名使我明白我正在初始化期望,因为你不能真正使用初始化器XCTestExpectation.但是如果扩展不在测试目标中,那么就无法编译:

无法为"XCTest"加载基础模块

import XCTest

public extension XCTestCase {
    func makeExpectation() -> XCTestExpectation {
        return expectation(withDescription: "")
    }
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*ton 8

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

  1. 具有iOS应用目标和单元测试目标的SampleApp项目.
  2. SharedTestFramework项目,它导入XCTest并声明您在问题中添加的单个扩展名.

SampleAppTests目标链接到SharedTestFramework,以便能够使用它定义的扩展.单个测试文件导入SharedTestFramework.

通过这些步骤,我还会遇到Cannot load underlying module for 'XCTest'构建SharedTestFramework的时间.

解决方法是更新Framework Search Pathsto include "$(PLATFORM_DIR)/Developer/Library/Frameworks".现在,SharedTestFramework正确编译,正如您在我上传的工作区中看到的那样,SampleAppTests目标能够成功使用它.

老而破坏的答案

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

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

我不确定这是否可行.我更有信心这不是Apple期望或支持的情况.

  • 向我们展示如何在框架中"导入XCTest",您可以将其导入到单元测试包中,并获得赏金! (2认同)
  • 我用迦太基 我认为与使用带有构建框架的"标准Xcode项目"相同.更容易/更快地管理. (2认同)