Skip to content
Merged
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
19 changes: 17 additions & 2 deletions docs/Changelog-Platform.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ See full log [of v4.3.3...v4.4.0](https://github.com/microsoft/testfx/compare/v4
* Allow overriding the Unix directory used for IPC named pipes, enabling test execution in sandboxes where the default temporary directory is unavailable, by @Evangelink in [#9846](https://github.com/microsoft/testfx/pull/9846)
* Add `--show-slowest-tests <count>` to the core terminal reporter to list the requested number of slowest completed tests at the end of a run by @Evangelink in [#9894](https://github.com/microsoft/testfx/pull/9894)
* Add code-coverage messages, coverage-threshold checks and an end-of-run coverage summary to the platform's coverage consumer model by @james-newell-forge in [#9896](https://github.com/microsoft/testfx/pull/9896)
* Add artifact post-processing for `dotnet test`, including automatic TRX, JUnit and CTRF merge processors and their merge engines, artifact-kind metadata, provenance for every merged input and an opt-in contract for processors that can accept an incomplete set of complete artifacts from a policy-truncated run. The built-in report processors do not opt in, and partially written or malformed artifacts remain invalid inputs, by @Evangelink in [#9805](https://github.com/microsoft/testfx/pull/9805), [#10086](https://github.com/microsoft/testfx/pull/10086), [#10445](https://github.com/microsoft/testfx/pull/10445), [#10463](https://github.com/microsoft/testfx/pull/10463), [#10506](https://github.com/microsoft/testfx/pull/10506) and [#10507](https://github.com/microsoft/testfx/pull/10507)
* Add packaged-app identity detection, MSIX registration and AUMID activation to `Microsoft.Testing.Extensions.PackagedApp`, and support unpackaged WinUI test applications under Microsoft.Testing.Platform, by @Evangelink in [#9914](https://github.com/microsoft/testfx/pull/9914), [#9970](https://github.com/microsoft/testfx/pull/9970) and [#10330](https://github.com/microsoft/testfx/pull/10330)
* Add artifact post-processing for `dotnet test`, including automatic TRX, JUnit, CTRF and HTML merge processors and their merge engines, artifact-kind metadata, provenance for every merged input and an opt-in contract for processors that can accept an incomplete set of complete artifacts from a policy-truncated run. The built-in report processors do not opt in, and partially written or malformed artifacts remain invalid inputs, by @Evangelink in [#9805](https://github.com/microsoft/testfx/pull/9805), [#10086](https://github.com/microsoft/testfx/pull/10086), [#10445](https://github.com/microsoft/testfx/pull/10445), [#10463](https://github.com/microsoft/testfx/pull/10463), [#10506](https://github.com/microsoft/testfx/pull/10506), [#10507](https://github.com/microsoft/testfx/pull/10507) and [#10529](https://github.com/microsoft/testfx/pull/10529)
* Add packaged-app identity detection, MSIX registration, AUMID activation, AppContainer argument delivery and controller-pipe authorization to `Microsoft.Testing.Extensions.PackagedApp`, and support unpackaged WinUI test applications under Microsoft.Testing.Platform, by @Evangelink in [#9914](https://github.com/microsoft/testfx/pull/9914), [#9970](https://github.com/microsoft/testfx/pull/9970), [#10330](https://github.com/microsoft/testfx/pull/10330), [#10489](https://github.com/microsoft/testfx/pull/10489) and [#10491](https://github.com/microsoft/testfx/pull/10491)
* Enable Microsoft.Testing.Platform test execution on `browser-wasm` and `wasi-wasm`, using HTTP transport for the browser `dotnet test` protocol and cooperative active/slow-test reporting on the single-threaded browser runtime, by @Evangelink in [#9781](https://github.com/microsoft/testfx/pull/9781), [#9857](https://github.com/microsoft/testfx/pull/9857), [#10129](https://github.com/microsoft/testfx/pull/10129), [#10143](https://github.com/microsoft/testfx/pull/10143) and [#10128](https://github.com/microsoft/testfx/pull/10128)
* Add composable test-execution filter providers, so framework and extension filters can participate in one ordered filtering pipeline, by @Evangelink in [#10235](https://github.com/microsoft/testfx/pull/10235)
* Add `--report-azdo-groups <on|off>` and `--report-azdo-annotations <on|off>` toggles to Azure DevOps report extension by @Evangelink in [#9542](https://github.com/microsoft/testfx/pull/9542)
Expand All @@ -29,6 +29,11 @@ See full log [of v4.3.3...v4.4.0](https://github.com/microsoft/testfx/compare/v4
* Allow setting environment variables on the test process launched by the `InvokeTestingPlatform` MSBuild target (`/t:Test`) through the `TestingPlatformEnvironmentVariable` item: `<TestingPlatformEnvironmentVariable Include="DOTNET_ROOT" Value="$(DotNetRoot)" />`. The value is carried by item metadata, which is not subject to MSBuild's `;` splitting, so values containing a `;` reach the test process as authored. The variables are applied on top of the environment inherited from MSBuild, so declaring none keeps the previous behavior in [#10342](https://github.com/microsoft/testfx/issues/10342)
* Pin `Microsoft.Testing.Extensions.GitHubActionsReport` annotations to the test's declared source location (`TestFileLocationProperty`) when the failure's stack trace yields no frame inside the workspace, and use it to place skipped-test `::warning` annotations on the pull request diff gutter instead of emitting them title-only. The property is populated by the MSTest adapter and by the VSTest bridge, so xUnit, NUnit and other bridged frameworks are covered too in [#9003](https://github.com/microsoft/testfx/issues/9003)
* Add opt-in dynamically resolved extensions through JSON manifests. `--enable-dynamic-extensions` allows test applications to discover and load extension assemblies that are not statically referenced, by @Evangelink in [#10406](https://github.com/microsoft/testfx/pull/10406)
* Add the source-only `Microsoft.Testing.Platform.ServerMode.Client.Sources` package, providing a canonical dependency-free, Native AOT-compatible client for the platform's server-mode JSON-RPC protocol, by @nohwnd in [#10085](https://github.com/microsoft/testfx/pull/10085)
* Aggregate GitHub Actions and Azure DevOps Markdown summaries across all modules in a `dotnet test` invocation while retaining deterministic per-assembly details and authoritative run totals, duration and exit verdict, by @Evangelink in [#10530](https://github.com/microsoft/testfx/pull/10530)
* Add provider-neutral code-coverage counts, percentages, threshold results and partial-coverage indicators to aggregated GitHub Actions and Azure DevOps summaries, by @Evangelink in [#10693](https://github.com/microsoft/testfx/pull/10693)
* Add `on-failure` support to `--report-gh-step-summary` and add `--report-gh-step-summary-sections` for selecting `test-results`, `slow-tests`, `coverage` or `all`, by @Evangelink in [#10695](https://github.com/microsoft/testfx/pull/10695) and [#10697](https://github.com/microsoft/testfx/pull/10697)
* Add `IConfigurationRoot`, `IConfigurationSection` and `IHierarchicalConfigurationProvider` so extensions can consume merged nested configuration without reparsing source-specific JSON, by @Evangelink in [#10699](https://github.com/microsoft/testfx/pull/10699)

### Changed

Expand All @@ -40,6 +45,12 @@ See full log [of v4.3.3...v4.4.0](https://github.com/microsoft/testfx/compare/v4
* Send `pipelineReference` (stage, phase and job, with their attempt numbers) and `startedDate` when `--publish-azdo-test-results` creates an Azure DevOps test run, so the run is attributed to the stage and job that produced it in multi-stage pipelines instead of only to the build, by @Evangelink in [#10331](https://github.com/microsoft/testfx/pull/10331)
* Expand OpenTelemetry support with testing semantic conventions, environment-driven configuration, resource detection and spans for MSTest tests and fixtures by @Evangelink in [#10358](https://github.com/microsoft/testfx/pull/10358)
* Publish Azure DevOps retry attempts as sub-results of one logical test result, so a test recovered by retry has the final outcome while retaining its attempt history, by @Evangelink in [#10431](https://github.com/microsoft/testfx/pull/10431)
* Promote the OpenTelemetry, PackagedApp and GitHub Actions report extensions from experimental alpha versioning to the Microsoft.Testing.Platform release line, while keeping the generic test-host launcher contract experimental, by @Evangelink in [#10476](https://github.com/microsoft/testfx/pull/10476)
* Default Azure DevOps per-assembly log groups to `off` because parallel assembly output can interleave anonymous groups; use `--report-azdo-groups on` to opt in, by @Evangelink in [#10474](https://github.com/microsoft/testfx/pull/10474)
* Suppress redundant in-progress server-mode updates when the same emitted batch contains a terminal update for that test UID, by @Evangelink in [#10483](https://github.com/microsoft/testfx/pull/10483)
* Defer Application Insights client initialization until the first telemetry payload, avoiding initialization and flush overhead for runs that emit no telemetry, by @Evangelink in [#10544](https://github.com/microsoft/testfx/pull/10544)
* Reduce allocations in VSTestBridge custom-property lookup and server-mode notification serialization without changing protocol shape or ordering, by @Evangelink in [#10586](https://github.com/microsoft/testfx/pull/10586) and [#10670](https://github.com/microsoft/testfx/pull/10670)
* Label Azure DevOps retry sub-results as `Attempt# <n> - <test>` and upload each retry attempt's artifacts to the sub-result that produced them, by @Evangelink in [#10704](https://github.com/microsoft/testfx/pull/10704) and [#10723](https://github.com/microsoft/testfx/pull/10723)

### Fixed

Expand All @@ -60,6 +71,10 @@ See full log [of v4.3.3...v4.4.0](https://github.com/microsoft/testfx/compare/v4
* Keep an Azure DevOps test run open while a peer test project that is still running has yet to publish into it. The owner previously gave up after a fixed 30 second grace period, so in a multi-project build a project that finished early could complete the run and make every result the remaining projects sent afterwards be rejected. Participants whose process is provably alive are now waited for, bounded by a hard cap so a leaked process cannot stall a build in [#10360](https://github.com/microsoft/testfx/issues/10360)
* Release what an `ITestHostOrchestratorApplicationLifetime` acquired in `BeforeRunAsync` when the orchestration is canceled or fails. `AfterRunAsync` was only invoked when the orchestrator completed normally, so an Azure DevOps test run created before a cancellation — or before `--retry-failed-tests` rejected server mode or hot reload — was left `InProgress` and never appeared in the build's Tests tab in [#10360](https://github.com/microsoft/testfx/issues/10360)
* Surface the underlying error when the diagnostic log file cannot be created instead of reporting only the follow-on logger failure by @Evangelink in [#10374](https://github.com/microsoft/testfx/pull/10374)
* Reject GitHub Actions report sub-options unless `--report-gh` is also specified, instead of accepting options that can never take effect, by @Evangelink in [#10500](https://github.com/microsoft/testfx/pull/10500)
* Consolidate JUnit and CTRF results across `--retry-failed-tests` attempts so top-level reports retain tests that passed before the final narrowed attempt and represent each logical test's final outcome, by @Evangelink in [#10542](https://github.com/microsoft/testfx/pull/10542)
* Fix a TRX process-lifetime handshake race that could fail fast, zero-selection runs when TRX and crash-dump reporting were enabled under thread-pool contention, by @Evangelink in [#10682](https://github.com/microsoft/testfx/pull/10682)
* Publish Azure DevOps live test results with their canonical fully qualified test name and TRX-compatible assembly storage identity instead of an opaque test-node UID, restoring history matching with `PublishTestResults@2`, by @Evangelink in [#10706](https://github.com/microsoft/testfx/pull/10706)

## <a name="2.3.3" />[2.3.3] - 2026-07-28

Expand Down
12 changes: 12 additions & 0 deletions docs/Changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,22 @@ See full log [of v4.3.3...v4.4.0](https://github.com/microsoft/testfx/compare/v4
* Support testing unpackaged WinUI applications under Microsoft.Testing.Platform by @Evangelink in [#10330](https://github.com/microsoft/testfx/pull/10330)
* Report assertion expected/actual values through a dedicated platform property so IDEs and reporters can consume structured assertion details by @Evangelink in [#10353](https://github.com/microsoft/testfx/pull/10353)
* Emit OpenTelemetry spans for MSTest tests and fixture methods as part of the expanded testing semantic conventions by @Evangelink in [#10358](https://github.com/microsoft/testfx/pull/10358)
* Add MSTEST0082 to detect lifecycle and test members inherited from a base class compiled against a different major MSTest framework version, where the assembly rename between v3 and v4 would otherwise make those members silently undiscoverable, by @nohwnd and @Evangelink in [#10508](https://github.com/microsoft/testfx/pull/10508) and [#10637](https://github.com/microsoft/testfx/pull/10637)
* Add MSTEST0083 and a code fix to replace executable-file guards before matching `Process.Start` calls with `[ExecutableCondition]`, by @Evangelink in [#10634](https://github.com/microsoft/testfx/pull/10634)

### Changed

* Report every `[Retry]` attempt to the test host instead of discarding all but the last one. A retried test now shows its attempts in the terminal (`failed (try 1) MyTest`), is reconciled in the run summary's `flaky:` / `retried:` lines and listed by name under `Flaky tests:`, and is finally detected as `flaky` (with `retries` / `retryAttempts[]`) by the CTRF report. Superseded attempts do not affect the process exit code and are filtered out of the TRX and JUnit reports, so those keep one row per test in [#10292](https://github.com/microsoft/testfx/issues/10292)
* Make MSTest's Microsoft.Testing.Platform path native-only: `MSTest.TestAdapter` no longer depends on `Microsoft.Testing.Extensions.VSTestBridge` and now references `Microsoft.Testing.Extensions.TrxReport.Abstractions`, `Microsoft.Testing.Extensions.Telemetry`, and `Microsoft.TestPlatform.ObjectModel` directly by @Evangelink in [#9755](https://github.com/microsoft/testfx/pull/9755)
* Make `DynamicData` and reflection-free source-generation metadata safer under trimming and Native AOT, reducing trim warnings and retaining the members needed for discovery and execution by @Evangelink in [#9832](https://github.com/microsoft/testfx/pull/9832), [#9861](https://github.com/microsoft/testfx/pull/9861) and [#10136](https://github.com/microsoft/testfx/pull/10136)
* Clarify the `[Retry]` documentation that a data-driven attempt continues retrying while any row failed or timed out; an inconclusive row only stops retrying when no sibling row in that attempt failed or timed out, by @Evangelink in [#9936](https://github.com/microsoft/testfx/pull/9936)
* Graduate `MSTest.SourceGeneration` from its independently versioned alpha line so it ships at the MSTest version. Non-NativeAOT MSTest.Sdk projects can opt in with `<EnableMSTestSourceGeneration>true</EnableMSTestSourceGeneration>`, by @Evangelink in [#10477](https://github.com/microsoft/testfx/pull/10477)
* Reduce data-driven display-name allocations by formatting scalar and recursively nested array arguments into one buffer while preserving existing display names and culture-sensitive formatting, by @Evangelink in [#10528](https://github.com/microsoft/testfx/pull/10528)
* Reduce reflection-free source-generation startup time and generated output size by removing unused metadata and streamlining runtime registration, by @Evangelink in [#10545](https://github.com/microsoft/testfx/pull/10545)
* Reduce assertion telemetry contention during parallel test execution, by @Evangelink in [#10560](https://github.com/microsoft/testfx/pull/10560)
* Make non-generic `ICollection` overloads of `Assert.HasCount` and `Assert.IsEmpty` use the collection's O(1) `Count` instead of enumerating it, by @Evangelink in [#10575](https://github.com/microsoft/testfx/pull/10575)
* Reuse string-pattern regular expressions in `Assert.Matches` and `Assert.DoesNotMatch` through a bounded, culture-aware cache, by @Evangelink in [#10661](https://github.com/microsoft/testfx/pull/10661)
* Cache immutable Microsoft.Testing.Platform node properties when converting MSTest test elements, reducing per-message allocations while preserving isolated mutable property bags, by @Evangelink in [#10694](https://github.com/microsoft/testfx/pull/10694)

### Fixed

Expand All @@ -42,6 +51,9 @@ See full log [of v4.3.3...v4.4.0](https://github.com/microsoft/testfx/compare/v4
* Skip adapter telemetry on `wasi-wasm` to avoid a `PlatformNotSupportedException` from SHA-256 during test startup by @Evangelink in [#9930](https://github.com/microsoft/testfx/pull/9930)
* Fix live MSTest output deadlocking when test execution and output forwarding contend during completion by @Evangelink in [#10169](https://github.com/microsoft/testfx/pull/10169)
* Fix MSTEST0024 not reporting coalesce (`s_testContext ??= tc`) and deconstruction (`(s_testContext, _) = (tc, 0)`) assignments of a `TestContext` parameter to a static member. Projects treating warnings as errors may see new MSTEST0024 diagnostics on code that previously went unreported by @Evangelink in [#10244](https://github.com/microsoft/testfx/pull/10244)
* Prevent long-running .NET Framework tests from losing cross-AppDomain assembly-resolution logging after the remoting lease expires, and keep fallback diagnostics from being misclassified as MSBuild errors, by @Evangelink and @nohwnd in [#10532](https://github.com/microsoft/testfx/pull/10532) and [#10604](https://github.com/microsoft/testfx/pull/10604)
* Preserve user-declared source-generated method attributes for async tests while merging only compiler-generated async metadata at runtime, by @Evangelink in [#10700](https://github.com/microsoft/testfx/pull/10700)
* Mark `MSTestAdapter.PlatformServices` as non-packable because it is embedded in `MSTest.TestAdapter`, preventing direct pack invocations from producing an unintended standalone package, by @Evangelink in [#10728](https://github.com/microsoft/testfx/pull/10728)

## <a name="4.3.3" />[4.3.3] - 2026-07-28

Expand Down