例如,我从不使用描述XCTestCase.expectation,所以我想使用一个函数为它提供一个默认值,并通过命名使我明白我正在初始化期望,因为你不能真正使用初始化器XCTestExpectation.但是如果扩展不在测试目标中,那么就无法编译:
无法为"XCTest"加载基础模块
import XCTest
public extension XCTestCase {
func makeExpectation() -> XCTestExpectation {
return expectation(withDescription: "")
}
}
Run Code Online (Sandbox Code Playgroud)
我在这里创建了一个xcworkspace(https://github.com/dtweston/TestFrameworkSample),它演示了你的问题的解决方案.此工作空间中有两个项目:
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期望或支持的情况.