[swift-evolution] [SwiftPM] Proposal: Add support for test-only dependencies

Xiaodi Wu xiaodi.wu at gmail.com
Tue Dec 27 18:01:59 CST 2016

The need for a feature such as this was pointed out some time ago. A
proposal to allow dependencies to be declared with increased granularity
has already been written, reviewed, and accepted! Here it is:

According to the authors, the proposal was meant to be a more general
solution that enables specifying test dependencies as well as other use

The proposal came up for review, received no feedback, and was accepted

On Tue, Dec 27, 2016 at 5:41 PM, thislooksfun via swift-evolution <
swift-evolution at swift.org> wrote:

> Does anyone else have any thoughts on this, or should I go ahead an
> assemble a PR?
> -thislooksfun (tlf)
> On Dec 26, 2016, at 1:56 PM, thislooksfun <thislooksfun at repbot.org> wrote:
> (I think this is the right place for this suggestion, but please let me
> know if I'm mistaken)
> There is currently no supported way to have some dependencies only used
> for testing (`swift test`), and the workarounds for it, while workable, are
> unnecessary crude.
> Currently, what a lot of projects are doing is defining a
> `.Package.test.swift` file that is then copied over `Package.swift` when
> tests are to be run (on external CI, for example). While this works, it
> adds a extra step and another point of failure (if you forget to add a new
> dependency to both `Package` files, for example.
> What I propose is a new section of `Package.swift`, labelled either
> `testDependencies` or `devDependencies`, and the modules referenced within
> are only loaded/compiled when running `swift test`
> // Package.swift
> import PackageDescription
> let package = Package(
>     name: "Project",
>     targets: [
>       Target(name: "BoxioDebug", dependencies: ["Core"]),
>     ],
>     dependencies: [	//Same as before
>     ],
>     testDependencies: [
>         .Package(url: "https://github.com/FooBar/PackageOnlyNeededForTesting.git", majorVersion: 1),
>     ]
> )
> This solves having to manually switch out Package files or `.Package`
> statements inside one Package file when trying to run tests, and keeps all
> dependencies neatly organized in one file.
> This change is purely additive and optional, no existing code needs to
> change for this to be added.
> A real world example is a dependency on Quick (or another such testing
> framework), that itself uses XCTest, and thus crashes when being run
> outside of `swift test` (add Quick to Package.swift, run `swift build` and
> run the compiled binary). With the new `test[dev]Dependencies`, running
> `swift build` wouldn't even see Quick, and thus would compile and run
> correctly, but `swift test` would both see and use Quick for running the
> test suite.
> *Other solutions considered:*
> Another potential solution is to only compile the dependencies that were
> actually used when running `swift build`, since that seems to be the cause
> of the above problem.
> -thislooksfun (tlf)
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20161227/debda661/attachment.html>

More information about the swift-evolution mailing list