Table of Contents

Core Framework v3 3.0.1 2025 August 15

Today, we're shipping three new releases:

  • xUnit.net Core Framework v3 3.0.1
  • xUnit.net Analyzers 1.24.0 (release notes)
  • xUnit.net Visual Studio adapter 3.1.4 (release notes)

It's been 1 month since the release of 3.0.0.

As always, we'd like to thank all the users who contributed to the success of xUnit.net through usage, feedback, and code. 🎉

Release Notes

These release notes are a list of changes from 3.0.0 to 3.0.1.

Core Framework

  • We have added CulturedFact and CulturedTheory attributes (ported from our own test project). These attributes allow the user to specify one or more override cultures to run the tests with. The test display names will be decorated with the culture name (i.e., Namespace.TestClass.TestMethod[en-US]. xunit/xunit#2182

  • We have added support for serializing tuples, so long as all the values in the tuple are serializable. xunit/xunit#3361

  • We have updated the selection order of custom serializers (that is, objects which implement IXunitSerializer) such that user-provided serializers will be chosen before the built-in serializers. This should allow users to register more specialized serializers for objects that might otherwise be serialized using built-in functionality (e.g., types that implement IFormattable and IParsable<>). xunit/xunit#3367

  • We have added support for test attachments to our TRX report generator. xunit/xunit#3363

  • We have updated our CTRF report generator to comply with updates to the CTRF schema. This includes:

    • Source line has been moved to .results.tests[].line, from .results.tests[].extra.fileLine.
    • Attachments have been moved to .results.tests[].attachments[] (an array of the new attachment object), from .results.tests[].extra.attachments (an object with one property per attachment). Note that attachments are now written to disk with a local file reference, whereas they previously were stored inline in the JSON.
  • We have added the ability to control test assembly unique IDs, to support more repeatable randomization across test assemblies built in multiple environments (i.e., a developer machine and a CI server). For more information, see the stable randomization section of the "What's New in xUnit.net v3?" documentation page. xunit/xunit#3365

  • BUG: We fixed an issue with CTRF generation that was emitting incorrect timestamps, which caused execution time calculations to be too-small by a factor of 1000. xunit/xunit#3358

  • BUG: We fixed an issue where the ordering of test assemblies and test collections could be inconsistent, depending on how the test assembly was run (typically manifested in the order being reversed). xunit/xunit#3359

Assertion Library

  • We have added support for unsafe pointers to Assert.Null and Assert.NotNull. (Note that consumers of source-based assertions, such as via xunit.v3.assert.source or Git Submodule, must define the compilation symbol XUNIT_POINTERS and add <AllowUnsafeBlocks>true</AllowUnsafeBlocks> to their .csproj file to enable unsafe pointer support.) xunit/xunit#3346

  • BUG: We fixed an issue with field exclusions in Assert.EquivalentWithExclusions where we could accidentally exclude inappropriate members. xunit/xunit#3347

Runner Utility

  • BUG: We fixed an issue where source information providers could be double-disposed when being passed in support of xUnit.net v2 test projects.