使用 Swift 包管理器时仅测试依赖项

问题描述 投票:0回答:3

我在使用 Swift 包管理器时看到了仅测试依赖项的提及,但无法让它们工作。例如:

https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20160104/005409.html https://github.com/apple/swift-package-manager/pull/74 http://blog.krzyzanowskim.com/2016/08/09/package-swift-manual/#testDependency

我想要的是在我的 XCtests 中使用依赖项(例如,对于特定目标),但不应用于已部署的包中。

如果能提供工作示例,我们将不胜感激。

swift3 xcode8 xctest swift-package-manager server-side-swift
3个回答
8
投票

目前 Swift 包管理器中禁用了“仅测试依赖项”功能。它最初是实现的,但在这次提交中被删除了

来自提交的描述:

从 PackageDescription 中删除测试依赖项 此功能应该仅支持根的依赖关系 包,但在某些时候它停止工作,但 API 仍然 保持开放。此补丁删除了公共 API。这是一个有效且 期望的功能应该在完成后返回 对快速进化的正确回顾。


3
投票
@Vadim 的答案是正确的,目前没有用于测试依赖项的官方 API,但有解决方法。例如,ReactiveSwift 使用

alternate Package.swift 进行测试,在 CI 上执行测试时会覆盖原始包(请参阅他们的 travis 配置文件)。它并不优雅,但很好,它可以完成工作,直到 SPM 恢复这个非常需要的功能。


0
投票
更新:

SE-0226提到它得到部分支持。

从Swift5.9开始全面支持。

这是我的 SPM 之一的包清单。我只需要在测试用例中测试 WebDAV 功能。

// The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription let package = Package( name: "FilesProvider", platforms: [ .iOS(.v13), .tvOS(.v13), .macOS(.v10_15), .visionOS(.v1) ], products: [ // Products define the executables and libraries produced by a package, and make them visible to other packages. .library( name: "FilesProvider", targets: ["FilesProvider"] ) ], dependencies: [ .package(path: "../GCDWebServer") ], targets: [ .target(name: "FilesProvider", dependencies: [], path: "Sources" ), .testTarget(name: "FilesProviderTests", dependencies: ["FilesProvider", .product(name: "GCDWebDAVServer",package: "GCDWebServer") ], path: "Tests" ), ] )
是的,它就像一个魅力:

© www.soinside.com 2019 - 2024. All rights reserved.