Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# TUnit docs — local Markdown copy

Every page of https://tunit.dev/docs as Markdown, one file per page, same tree as the site.
Mirrored from `https://tunit.dev/llms.txt`; latest TUnit release at refresh time: `v1.68.17` (see `VERSION`).
Mirrored from `https://tunit.dev/llms.txt`; latest TUnit release at refresh time: `v1.70.1` (see `VERSION`).

## How to use this folder

Expand Down Expand Up @@ -144,6 +144,7 @@ This file is generated — edit `scripts/refresh_docs.py`, not this file.
- `docs/reference/environment-variables.md` — **Environment Variables**: TUnit supports configuration through environment variables, allowing you to set defaults without modifying command-line arguments.
- `docs/reference/programmatic-configuration.md` — **Programmatic Configuration**: Overview
- `docs/reference/test-configuration.md` — **Test Configuration**: TUnit supports having a testconfig.json file within your test project.
- `docs/reference/tunit0075.md` — **TUnit0075: Use the hook cancellation token for setup**: Severity: Warning

### `docs/writing-tests/`

Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
v1.68.17
v1.70.1
212 changes: 186 additions & 26 deletions WHATSNEW.md
Original file line number Diff line number Diff line change
@@ -1,41 +1,201 @@
# TUnit v1.68.4 → v1.68.17
# TUnit v1.68.17 → v1.70.1

Compare: https://github.com/thomhurst/TUnit/compare/v1.68.4...v1.68.17
Compare: https://github.com/thomhurst/TUnit/compare/v1.68.17...v1.70.1

## Releases

### v1.68.17
### v1.69.0

* fix(mocks): emit init accessors for init-only properties and indexers by @thomhurst in https://github.com/thomhurst/TUnit/pull/6833
* fix(mocks): let one type be mocked regularly and wrapped in one compilation by @thomhurst in https://github.com/thomhurst/TUnit/pull/6835
* fix(mocks): keep editors in sync with publicized project references (#6836) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6837
* feat(templates): add enableDotCover flag (#6714) by @ForNeVeR in https://github.com/thomhurst/TUnit/pull/6844
* fix: don't request semantic models for attribute syntax from other compilations (DevKit crash) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6855
* fix(ci): restore net472 PublicAPI tests on Windows by @thomhurst in https://github.com/thomhurst/TUnit/pull/6857
* perf(html-report): stream report JSON through pooled chunks and overlap sidecar serialization by @thomhurst in https://github.com/thomhurst/TUnit/pull/6860
* chore(renovate): cap Microsoft.Build packages below 18.10.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6863
* perf: shrink generated per-class test source static constructors (~40% less startup JIT) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6859
* refactor: remove unreachable decimal source-text path from GenerateAttributeInstantiation by @thomhurst in https://github.com/thomhurst/TUnit/pull/6856
* perf: cut per-test allocations in discovery and execution (-61% at 10k tests) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6861
* perf: stop hashing per-test event receivers during registration (data-driven tests 2.9x faster at 10k) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6858
* perf(analyzers): cut TUnit analyzer build time ~60% on large test projects by @thomhurst in https://github.com/thomhurst/TUnit/pull/6862
* @ForNeVeR made their first contribution in https://github.com/thomhurst/TUnit/pull/6844

### v1.69.16

* fix: preserve TRX results when session cleanup fails by @Sing303 in https://github.com/thomhurst/TUnit/pull/6879
* @Sing303 made their first contribution in https://github.com/thomhurst/TUnit/pull/6879

### v1.69.21

* fix: preserve JUnit results after session cancellation by @Sing303 in https://github.com/thomhurst/TUnit/pull/6882
* feat: warn when setup hooks pass the test execution token by @Sing303 in https://github.com/thomhurst/TUnit/pull/6883
* fix: complete DedicatedThreadExecutor tests only after CleanUp() returns by @glennawatson in https://github.com/thomhurst/TUnit/pull/6886
* @glennawatson made their first contribution in https://github.com/thomhurst/TUnit/pull/6886

### v1.69.24

* fix: skip Ctrl+C handling where Console.CancelKeyPress is unsupported by @glennawatson in https://github.com/thomhurst/TUnit/pull/6889

### v1.70.0

* feat: clear parallel constraints and limiter during test registration by @thomhurst in https://github.com/thomhurst/TUnit/pull/6897
* fix(mocks): emit valid lambdas for Task/ValueTask-returning delegate mocks by @thomhurst in https://github.com/thomhurst/TUnit/pull/6896

### v1.70.1

* fix: don't run DedicatedThreadExecutor continuations inline on the dedicated thread by @thomhurst in https://github.com/thomhurst/TUnit/pull/6898

## Public API

No public API change.
#### Core_Library

```diff
(patch too large — open the compare link)
```

## Library code (src/)

- `src/TUnit.Mocks.SourceGenerator/Builders/MockImplBuilder.cs` (+31 −14)
- `src/TUnit.Mocks.SourceGenerator/Builders/MockMembersBuilder.cs` (+5 −1)
- `src/TUnit.Mocks.SourceGenerator/Builders/MockWrapperTypeBuilder.cs` (+46 −10)
- `src/TUnit.Mocks.SourceGenerator/Discovery/GeneratedNameCollisionDetector.cs` (+1 −6)
- `src/TUnit.Mocks.SourceGenerator/Discovery/MemberDiscovery.cs` (+69 −5)
- `src/TUnit.Mocks.SourceGenerator/Discovery/MockTypeIdentity.cs` (+17 −0)
- `src/TUnit.Mocks.SourceGenerator/Discovery/SharedMemberSurfaceResolver.cs` (+57 −0)
- `src/TUnit.Mocks.SourceGenerator/MockGenerator.cs` (+21 −3)
- `src/TUnit.Mocks.SourceGenerator/Models/MockExplicitInterfaceSlot.cs` (+5 −1)
- `src/TUnit.Mocks.SourceGenerator/Models/MockMemberModel.cs` (+18 −0)
- `src/TUnit.Mocks.SourceGenerator/Models/MockTypeModel.cs` (+12 −0)
- `src/TUnit.Mocks/TUnit.Mocks.InternalsAccess.targets` (+25 −0)
- `src/TUnit.Templates/content/TUnit.Aspire.Starter/ExampleNamespace.ServiceDefaults/ExampleNamespace.ServiceDefaults.csproj` (+2 −2)
- `src/TUnit.Analyzers/AbstractTestClassWithDataSourcesAnalyzer.cs` (+3 −3)
- `src/TUnit.Analyzers/AnalyzerReleases.Unshipped.md` (+2 −1)
- `src/TUnit.Analyzers/AssemblyTestHooksAnalyzer.cs` (+8 −8)
- `src/TUnit.Analyzers/BeforeHookAsyncLocalAnalyzer.cs` (+5 −1)
- `src/TUnit.Analyzers/ClassDataSourceConstructorAnalyzer.cs` (+3 −5)
- `src/TUnit.Analyzers/ClassHooksAnalyzer.cs` (+8 −8)
- `src/TUnit.Analyzers/CombinedDataSourceAnalyzer.cs` (+2 −2)
- `src/TUnit.Analyzers/ConflictingExplicitAttributesAnalyzer.cs` (+4 −4)
- `src/TUnit.Analyzers/ConsoleOutAnalyzer.cs` (+1 −1)
- `src/TUnit.Analyzers/DiagnosticIds.cs` (+1 −0)
- `src/TUnit.Analyzers/Extensions/AttributeExtensions.cs` (+1 −2)
- `src/TUnit.Analyzers/Extensions/MethodExtensions.cs` (+1 −2)
- `src/TUnit.Analyzers/Extensions/ParameterExtensions.cs` (+4 −4)
- `src/TUnit.Analyzers/Extensions/PropertyExtensions.cs` (+1 −1)
- `src/TUnit.Analyzers/Extensions/SymbolExtensions.cs` (+3 −3)
- `src/TUnit.Analyzers/Extensions/TypeExtensions.GloballyQualified.cs` (+116 −0)
- `src/TUnit.Analyzers/Extensions/TypeExtensions.cs` (+3 −11)
- `src/TUnit.Analyzers/ForbidRedefiningAttributeUsageAnalyzer.cs` (+3 −1)
- `src/TUnit.Analyzers/InheritsTestsAnalyzer.cs` (+2 −2)
- `src/TUnit.Analyzers/InstanceTestHooksAnalyzer.cs` (+8 −8)
- `src/TUnit.Analyzers/MissingTestAttributeAnalyzer.cs` (+2 −1)
- `src/TUnit.Analyzers/PublicMethodMissingTestAttributeAnalyzer.cs` (+3 −1)
- `src/TUnit.Analyzers/Resources.resx` (+10 −1)
- `src/TUnit.Analyzers/Rules.cs` (+3 −0)
- `src/TUnit.Analyzers/SingleTUnitAttributeAnalyzer.cs` (+7 −1)
- `src/TUnit.Analyzers/TestDataAnalyzer.cs` (+3 −3)
- `src/TUnit.Analyzers/TimeoutCancellationTokenAnalyzer.cs` (+97 −4)
- `src/TUnit.Assertions.Analyzers/AwaitAssertionAnalyzer.cs` (+8 −0)
- `src/TUnit.Assertions.Analyzers/AwaitValueTaskAssertThatAnalyzer.cs` (+3 −5)
- `src/TUnit.Assertions.Analyzers/CompilerArgumentsPopulatedAnalyzer.cs` (+14 −18)
- `src/TUnit.Assertions.Analyzers/Extensions/TypeExtensions.cs` (+1 −7)
- `src/TUnit.Assertions.Analyzers/GenerateAssertionAnalyzer.cs` (+2 −1)
- `src/TUnit.Assertions.Analyzers/MixAndOrOperatorsAnalyzer.cs` (+3 −3)
- `src/TUnit.Assertions.Analyzers/ObjectBaseEqualsMethodAnalyzer.cs` (+2 −3)
- `src/TUnit.Assertions.Analyzers/TUnit.Assertions.Analyzers.csproj` (+4 −0)
- `src/TUnit.Assertions.Analyzers/XUnitAssertionAnalyzer.cs` (+19 −0)
- `src/TUnit.Core.SourceGenerator/CodeGenerationHelpers.cs` (+2 −189)
- `src/TUnit.Core.SourceGenerator/CodeGenerators/Writers/AttributeWriter.cs` (+24 −23)
- `src/TUnit.Core.SourceGenerator/Extensions/AttributeDataExtensions.cs` (+53 −0)
- `src/TUnit.Core.SourceGenerator/Generators/TestMetadataGenerator.cs` (+243 −60)
- `src/TUnit.Core.SourceGenerator/Models/TestMethodSourceCode.cs` (+3 −1)
- `src/TUnit.Core/AmbientContexts.cs` (+120 −0)
- `src/TUnit.Core/Contexts/TestRegisteredContext.cs` (+28 −0)
- `src/TUnit.Core/Data/ThreadSafeDictionary.cs` (+12 −0)
- `src/TUnit.Core/Discovery/ObjectGraphDiscoverer.cs` (+88 −1)
- `src/TUnit.Core/EngineCancellationToken.cs` (+41 −2)
- `src/TUnit.Core/Executors/DedicatedThreadExecutor.cs` (+122 −105)
- `src/TUnit.Core/Helpers/ClassConstructorHelper.cs` (+5 −6)
- `src/TUnit.Core/Helpers/LazyAttributeDictionary.cs` (+73 −0)
- `src/TUnit.Core/Models/AssemblyHookContext.cs` (+3 −7)
- `src/TUnit.Core/Models/ClassHookContext.cs` (+3 −7)
- `src/TUnit.Core/Models/TestBuildContext.cs` (+8 −0)
- `src/TUnit.Core/Models/TestDiscoveryContext.cs` (+2 −3)
- `src/TUnit.Core/Models/TestSessionContext.cs` (+3 −7)
- `src/TUnit.Core/TUnit.Core.targets` (+1 −1)
- `src/TUnit.Core/TestBuilderContext.cs` (+69 −4)
- `src/TUnit.Core/TestContext.Dependencies.cs` (+3 −2)
- `src/TUnit.Core/TestContext.Events.cs` (+12 −7)
- `src/TUnit.Core/TestContext.Output.cs` (+45 −10)
- `src/TUnit.Core/TestContext.Parallelization.cs` (+5 −0)
- `src/TUnit.Core/TestContext.cs` (+22 −10)
- `src/TUnit.Core/TestDetails.cs` (+4 −0)
- `src/TUnit.Core/TestEntryFactory.cs` (+72 −0)
- `src/TUnit.Core/TestMetadata`1.cs` (+6 −1)
- `src/TUnit.Core/Tracking/ObjectTracker.cs` (+22 −10)
- `src/TUnit.Engine/Building/Interfaces/ITestBuilder.cs` (+2 −2)
- `src/TUnit.Engine/Building/TestBuilder.cs` (+263 −116)
- `src/TUnit.Engine/Building/TestBuilderPipeline.cs` (+2 −2)
- `src/TUnit.Engine/Events/EventReceiverRegistry.cs` (+39 −9)
- `src/TUnit.Engine/Extensions/TestContextExtensions.cs` (+14 −5)
- `src/TUnit.Engine/Extensions/TestExtensions.cs` (+19 −16)
- `src/TUnit.Engine/Framework/TUnitTestFramework.cs` (+10 −2)
- `src/TUnit.Engine/Helpers/DataSourceMetadataExtractor.cs` (+12 −5)
- `src/TUnit.Engine/Reporters/Aggregation/AtomicFile.cs` (+18 −0)
- `src/TUnit.Engine/Reporters/Aggregation/ReportAggregator.cs` (+17 −0)
- `src/TUnit.Engine/Reporters/Aggregation/ReportDataJson.cs` (+21 −6)
- `src/TUnit.Engine/Reporters/Aggregation/SegmentedBufferWriter.cs` (+125 −0)
- `src/TUnit.Engine/Reporters/Html/ActivityCollector.cs` (+104 −49)
- `src/TUnit.Engine/Reporters/Html/HtmlReportGenerator.cs` (+36 −13)
- `src/TUnit.Engine/Reporters/Html/HtmlReporter.cs` (+76 −24)
- `src/TUnit.Engine/Reporters/JUnitReporter.cs` (+3 −2)
- `src/TUnit.Engine/Services/EventReceiverOrchestrator.cs` (+16 −0)
- `src/TUnit.Engine/Services/ObjectLifecycleService.cs` (+31 −7)
- `src/TUnit.Engine/Services/PropertyInjector.cs` (+18 −1)
- `src/TUnit.Engine/Services/TestArgumentRegistrationService.cs` (+36 −16)
- `src/TUnit.Engine/Services/TestDependencyResolver.cs` (+32 −2)
- `src/TUnit.Engine/Services/TestExecution/RetryHelper.cs` (+1 −1)
- `src/TUnit.Engine/Services/TestExecution/TestContextRestorer.cs` (+20 −0)
- `src/TUnit.Engine/Services/TestExecution/TestCoordinator.cs` (+27 −13)
- `src/TUnit.Engine/Services/TestFilterService.cs` (+12 −6)
- `src/TUnit.Engine/TestExecutor.cs` (+27 −8)
- `src/TUnit.Engine/Utilities/ParallelMap.cs` (+19 −1)
- `src/TUnit.Mocks.SourceGenerator/Builders/MockDelegateFactoryBuilder.cs` (+88 −32)
- `src/TUnit.Mocks.SourceGenerator/Builders/MockImplBuilder.cs` (+12 −7)
- `src/TUnit.Mocks.SourceGenerator/Extensions/TypeSymbolExtensions.cs` (+29 −24)
- `src/TUnit.Reporting.Tool/TUnit.Reporting.Tool.csproj` (+1 −0)
- `src/TUnit.Templates/README.md` (+16 −1)
- `src/TUnit.Templates/content/TUnit.Aspire.Starter/ExampleNamespace.ServiceDefaults/ExampleNamespace.ServiceDefaults.csproj` (+5 −5)
- `src/TUnit.Templates/content/TUnit.FSharp/.template.config/dotnetcli.host.json` (+9 −0)
- `src/TUnit.Templates/content/TUnit.FSharp/.template.config/ide.host.json` (+9 −0)
- `src/TUnit.Templates/content/TUnit.FSharp/.template.config/template.json` (+10 −1)
- `src/TUnit.Templates/content/TUnit.FSharp/TestProject.fsproj` (+3 −0)
- `src/TUnit.Templates/content/TUnit.VB/.template.config/dotnetcli.host.json` (+9 −0)
- `src/TUnit.Templates/content/TUnit.VB/.template.config/ide.host.json` (+9 −0)
- `src/TUnit.Templates/content/TUnit.VB/.template.config/template.json` (+10 −1)
- `src/TUnit.Templates/content/TUnit.VB/TestProject.vbproj` (+3 −0)
- `src/TUnit.Templates/content/TUnit/.template.config/dotnetcli.host.json` (+9 −0)
- `src/TUnit.Templates/content/TUnit/.template.config/ide.host.json` (+9 −0)
- `src/TUnit.Templates/content/TUnit/.template.config/template.json` (+7 −0)
- `src/TUnit.Templates/content/TUnit/TestProject.csproj` (+4 −1)

## Commits

13 commits; dependency bumps not listed.
55 commits; dependency bumps not listed.

- chore: update benchmark results (#6845)
- chore: update mock benchmark results (#6846)
- docs: consolidate agent instructions in AGENTS.md
- chore: update mock benchmark results (#6849)
- chore: update mock benchmark results (#6852)
- feat(templates): add enableDotCover flag (#6714) (#6844)
- fix: don't request semantic models for attribute syntax from other compilations (DevKit crash) (#6855)
- fix(ci): restore net472 PublicAPI tests on Windows (#6857)
- perf(html-report): stream report JSON through pooled chunks and overlap sidecar serialization (#6860)
- chore(renovate): cap Microsoft.Build packages below 18.10.0 (#6863)
- perf: shrink generated per-class test source static constructors (~40% less startup JIT) (#6859)
- refactor: remove unreachable decimal source-text path from GenerateAttributeInstantiation (#6856)
- perf: cut per-test allocations in discovery and execution (-61% at 10k tests) (#6861)
- perf: stop hashing per-test event receivers during registration (data-driven tests 2.9x faster at 10k) (#6858)
- +semver:minor - perf(analyzers): cut TUnit analyzer build time ~60% on large test projects (#6862)
- chore: update mock benchmark results (#6865)
- chore: update mock benchmark results (#6875)
- chore: update mock benchmark results (#6880)
- fix: preserve TRX results when session cleanup fails (#6879)
- chore: update mock benchmark results (#6884)
- fix: preserve JUnit results after session cancellation (#6882)
- feat: warn when setup hooks pass the test execution token (#6883)
- fix: complete DedicatedThreadExecutor tests only after CleanUp() returns (#6886)
- fix: skip Ctrl+C handling where Console.CancelKeyPress is unsupported (#6889)
- chore: update benchmark results (#6894)
- chore: update mock benchmark results (#6895)
- feat: let registration receivers clear parallel constraints and limiter (#6897)
- +semver:minor - fix(mocks): emit valid lambdas for Task/ValueTask-returning delegate mocks (#6896)
- fix: don't run DedicatedThreadExecutor continuations inline on the dedicated thread (#6898)

- chore: update mock benchmark results (#6826)
- chore: update mock benchmark results (#6830)
- fix(mocks): emit init accessors for init-only properties and indexers (#6833)
- fix(mocks): let one type be mocked regularly and wrapped in one compilation (#6835)
- fix(mocks): keep editors in sync with publicized project references (#6836) (#6837)
> Truncated by the GitHub compare API; the compare link above has the full list.
6 changes: 3 additions & 3 deletions docs/benchmarks.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

Last Updated

These benchmarks were automatically generated on **2026-09-20** from the latest CI run.
These benchmarks were automatically generated on **2026-09-27** from the latest CI run.

**Environment:** Ubuntu Latest • .NET SDK 10.0.401

Expand All @@ -29,7 +29,7 @@ These benchmarks compare TUnit against the most popular .NET testing frameworks:

| Framework | Version Tested |
| ------------ | -------------- |
| **TUnit** | 1.68.17 |
| **TUnit** | 1.69.21 |
| **xUnit v3** | 4.0.1 |
| **NUnit** | 4.6.1 |
| **MSTest** | 4.4.1 |
Expand Down Expand Up @@ -72,4 +72,4 @@ These benchmarks run automatically daily via [GitHub Actions](https://github.com

Each benchmark runs multiple iterations with statistical analysis to ensure accuracy. Results may vary based on hardware and test characteristics.

*Last generated: 2026-09-20T00:35:50.559Z*
*Last generated: 2026-09-27T00:42:59.274Z*
16 changes: 8 additions & 8 deletions docs/benchmarks/engine/AsyncTests.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,20 @@

Last Updated

This benchmark was automatically generated on **2026-09-20** from the latest CI run.
This benchmark was automatically generated on **2026-09-27** from the latest CI run.

**Environment:** Ubuntu Latest • .NET SDK 10.0.401

## 📊 Results

| Framework | Version | Mean | Median | StdDev |
| --------------- | ------- | -------- | -------- | -------- |
| **TUnit** | 1.68.17 | 462.4 ms | 446.4 ms | 60.95 ms |
| NUnit | 4.6.1 | 825.0 ms | 806.8 ms | 75.79 ms |
| MSTest | 4.4.1 | 813.7 ms | 803.3 ms | 56.30 ms |
| xUnit3 | 4.0.1 | 937.9 ms | 933.5 ms | 96.22 ms |
| **TUnit (AOT)** | 1.68.17 | 132.2 ms | 131.9 ms | 5.90 ms |
| xUnit3\_AOT | 4.0.1 | 132.4 ms | 132.3 ms | 5.27 ms |
| **TUnit** | 1.69.21 | 392.7 ms | 391.8 ms | 7.27 ms |
| NUnit | 4.6.1 | 733.0 ms | 730.9 ms | 14.43 ms |
| MSTest | 4.4.1 | 704.9 ms | 706.3 ms | 9.77 ms |
| xUnit3 | 4.0.1 | 749.6 ms | 749.3 ms | 7.23 ms |
| **TUnit (AOT)** | 1.69.21 | 117.1 ms | 117.0 ms | 0.57 ms |
| xUnit3\_AOT | 4.0.1 | 120.0 ms | 119.8 ms | 1.01 ms |

## 📈 Visual Comparison

Expand All @@ -33,4 +33,4 @@ Methodology

View the [benchmarks overview](/docs/benchmarks/.md) for methodology details and environment information.

*Last generated: 2026-09-20T00:35:50.557Z*
*Last generated: 2026-09-27T00:42:59.273Z*
12 changes: 6 additions & 6 deletions docs/benchmarks/engine/BuildTime.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

Last Updated

This benchmark was automatically generated on **2026-09-20** from the latest CI run.
This benchmark was automatically generated on **2026-09-27** from the latest CI run.

**Environment:** Ubuntu Latest • .NET SDK 10.0.401

Expand All @@ -14,10 +14,10 @@ Compilation time comparison across frameworks:

| Framework | Version | Mean | Median | StdDev |
| ------------- | ------- | ---------- | ---------- | -------- |
| **TUnit** | 1.68.17 | 1,062.5 ms | 1,050.6 ms | 70.63 ms |
| Build\_NUnit | 4.6.1 | 937.0 ms | 933.4 ms | 18.54 ms |
| Build\_MSTest | 4.4.1 | 1,097.7 ms | 1,088.1 ms | 67.60 ms |
| Build\_xUnit3 | 4.0.1 | 1,039.9 ms | 1,021.9 ms | 89.10 ms |
| **TUnit** | 1.69.21 | 985.8 ms | 973.0 ms | 42.92 ms |
| Build\_NUnit | 4.6.1 | 939.5 ms | 936.3 ms | 16.43 ms |
| Build\_MSTest | 4.4.1 | 1,127.6 ms | 1,140.8 ms | 91.05 ms |
| Build\_xUnit3 | 4.0.1 | 916.4 ms | 918.8 ms | 10.22 ms |

## 📈 Visual Comparison

Expand All @@ -29,4 +29,4 @@ Methodology

View the [benchmarks overview](/docs/benchmarks/.md) for methodology details and environment information.

*Last generated: 2026-09-20T00:35:50.559Z*
*Last generated: 2026-09-27T00:42:59.274Z*
Loading