ST-0012: Capturing Values in Exit Tests

Hello Swift community,

The review of ST-0012 "Capturing Values in Exit Tests" begins now and runs through Monday July 21, 2025. The proposal is available here:

swift-evolution/proposals/testing/0012-exit-test-value-capturing.md at main · swiftlang/swift-evolution · GitHub

Reviews are an important part of the Swift evolution process. All review feedback should be either on this forum thread or, if you would like to keep your feedback private, directly to the review manager. When emailing the review manager directly, please keep the proposal link at the top of the message.

Trying it out

To try this feature out, add a dependency to the main branch of swift-testing to your project and enable the ExperimentalExitTestValueCapture package trait[1]:

...
dependencies: [
  ...
  .package(
    url: "https://github.com/swiftlang/swift-testing.git",
    branch: "main",
    traits: [.defaults, "ExperimentalExitTestValueCapture"]
  ),
]

Then, add a target dependency to your test target:

.testTarget(
  ...
  dependencies: [
    ...
    .product(name: "Testing", package: "swift-testing"),
  ]

Finally, import Swift Testing using @_spi(Experimental) import Testing.

What goes into a review?

The goal of the review process is to improve the proposal under review
through constructive criticism and, eventually, determine the direction of
Swift. When writing your review, here are some questions you might want to
answer in your review:

  • What is your evaluation of the proposal?
  • Is the problem being addressed significant enough to warrant a change to Swift?
  • Does this proposal fit well with the feel and direction of Swift?
  • If you have used other languages or libraries with a similar feature, how do you feel that this proposal compares to those?
  • How much effort did you put into your review? A glance, a quick reading, or an in-depth study?

More information about the Swift evolution process is available at

swift-evolution/process.md at main · swiftlang/swift-evolution · GitHub

Thank you for contributing to Swift!

Paul LeMarquand

Review Manager


  1. Package traits require a package tools version of 6.2 or newer. You specify the package tools version with a comment at the top of Package.swift of the form // swift-tools-version: 6.2. ↩︎

9 Likes

I am excited for this!

Full disclosure: didn't read this in all details, but I read through all the feedback so far. :innocent:

Anyway, sounds like a clear win to me. +1

This is an obvious win, as well as obvious next step, so... yes! I'm looking forward to it!

I'm somewhat bummed about the limitations for Sendable & Codable, but given the limitations (sure you can get a copy of the memory in fork/posix_spawn, but that's not the mechanism that every platform will or even can use) it makes sense to serialize these values.

+1, I agree that this feature will be incredibly useful. I appreciate the acknowledgment of the less-than-ideal need to explicitly specify the type of a captured value. However, I also appreciate the clever techniques that allow skipping this step whenever possible, such as for arguments to the test function.

I would like to emphasize that it would be extremely beneficial to have something analogous to decltype or typeof, as was mentioned in the Future Directions, since it would simplify this aspect. This would be a general enhancement to the language, but it would particularly benefit macros.

1 Like

ST-0012 has been accepted. Thanks for participating!

Paul LeMarquand
Review Manager

2 Likes