生成的 swift 包中的 XCTestManifests

XCTestManifests in generated swift package

我目前正在创建一个 Swift 包。默认情况下,Xcode生成的包包含XCTestManifests文件,代码如下:

#if !canImport(ObjectiveC)
public func allTests() -> [XCTestCaseEntry] {
    return [
        testCase(TestPkgTests.allTests),
    ]
}
#endif

如您所见,这是returns所有测试用例的函数。但是,我很好奇它什么时候会被调用,在什么情况下会满足条件!CanImport (ObjectiveC)

这是 运行 在 macOS 以外的平台上进行测试所必需的。

在 macOS 上,测试运行器依赖于其他平台上不存在的 ObjectiveC 运行时,因此 canImport(ObjectiveC)falseallTests() 函数是从 LinuxMain.swift 文件调用的,您可以在 macOS 上通过 运行 swift test --generate-linuxmain.

生成它

在较新的 SwiftPM 版本中,有一个替代选项可以在这些平台上进行 运行 测试:swift test --enable-test-discovery。您可以在这里阅读更多相关信息:https://forums.swift.org/t/pitch-enable-test-discovery-by-default/36619

Swift 5.4:包括自动测试发现

Swift 5.4 (April 26, 2021 release) 默认包含测试发现。

Automatic test discovery is now the default on all platforms

swift test --enable-test-discovery 不再需要。

Swift 5.4+ swift package init 模板不生成 allTestsXCTestManifests.swift.