您如何在共享框架中为 XCTest 创建 public 扩展?
How do you create public extensions, in a shared framework, for XCTest?
比如我从来没有使用过XCTestCase.expectation
的描述,所以我想用一个函数为它提供一个默认值,通过命名来明确我正在初始化期望,因为你不能真正使用 XCTestExpectation
的初始值设定项。但如果扩展不在测试目标中,则无法编译:
Cannot load underlying module for 'XCTest'
import XCTest
public extension XCTestCase {
func makeExpectation() -> XCTestExpectation {
return expectation(withDescription: "")
}
}
我在这里创建了一个 xcworkspace (https://github.com/dtweston/TestFrameworkSample),它演示了您的问题的解决方案。此工作区中有两个项目:
- 带有 iOS 应用程序目标和单元测试目标的 SampleApp 项目。
- 导入 XCTest 并声明您在问题中提出的单个扩展的 SharedTestFramework 项目。
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 期望或支持的情况。
比如我从来没有使用过XCTestCase.expectation
的描述,所以我想用一个函数为它提供一个默认值,通过命名来明确我正在初始化期望,因为你不能真正使用 XCTestExpectation
的初始值设定项。但如果扩展不在测试目标中,则无法编译:
Cannot load underlying module for 'XCTest'
import XCTest
public extension XCTestCase {
func makeExpectation() -> XCTestExpectation {
return expectation(withDescription: "")
}
}
我在这里创建了一个 xcworkspace (https://github.com/dtweston/TestFrameworkSample),它演示了您的问题的解决方案。此工作区中有两个项目:
- 带有 iOS 应用程序目标和单元测试目标的 SampleApp 项目。
- 导入 XCTest 并声明您在问题中提出的单个扩展的 SharedTestFramework 项目。
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 期望或支持的情况。