feat(mocks): setup/verify on secondary interfaces of multi-type mocks - #6230
Conversation
…#4981) Mock.Of<T1, T2>() previously gave no way to configure T2 members: setup extensions were only generated for the primary type, and class-primary multi mocks were structurally broken (impl never implemented T2, factory never registered under the multi key). - Secondary members now surface as extensions on Mock<T1> (single shared engine: unified Invocations/Reset/VerifyAll/VerifyInOrder preserved). - One extension surface per (T1, Tn) pair, deduped across combos; member IDs are local ordinals translated to each combo impl's union IDs via a map the factory registers on the engine, so the same surface serves Mock.Of<T1,T2>() and Mock.Of<T1,T2,T3>() with different layouts. - Using a secondary extension on a mock created without that interface throws InvalidOperationException instead of silently never matching. - Name collisions across interfaces are exposed with a short interface prefix (mock.IBar_Tag); signature-identical members dedupe onto the primary surface and intercept calls through every interface cast. - Class primaries fixed: impl lists the additional interfaces and re-implements class-implemented members explicitly (intercepts EF-style explicit implementations like DbContext IInfrastructure<T>.Instance); partial factory registers the multi key; ctor-arg overloads added (Mock.Of<T1,T2>(params object[]) up to T4). - Single- and multi-type member walks unified into one collector so the primary's member-ID prefix invariant holds by construction.
There was a problem hiding this comment.
This is a well-designed and thoroughly tested implementation of a genuinely tricky feature. The design notes in the PR description show careful thinking about the hard cases. A few observations:
Design: the indirection layer is solid
The core design — one engine per mock, pair models carrying local ordinals, a factory-registered map translating local→union IDs at runtime — is the right choice. The alternative of duplicating member IDs per-combo would have broken the dedup invariant across combos, and the alternative of splitting engines would have fragmented Invocations/Reset/strict mode. The approach chosen threads the needle well.
The DiscoveryState refactor (replacing the parallel local variables in DiscoverMembers and DiscoverMembersFromMultipleTypes with a single shared object) is a clean win and eliminates the hand-sync drift the PR description notes had already occurred.
Potential issue: ComputeMemberIdMap silently leaves setter slots unmapped when the primary has no setter
In SecondarySurfaceFactory.ComputeMemberIdMap, when a standalone property p has a setter but the matched union property up does not, the setter's slot in map stays at -1:
if (p.HasSetter && up.HasSetter)
{
map[p.SetterMemberId] = up.SetterMemberId;
}That means TryGetSecondaryMemberId returns false for the setter ID, and __Id throws InvalidOperationException with the unhelpful message "This mock was not created with '...' as a secondary interface" — even though it was, the setter just doesn't exist on the primary. This scenario (secondary interface has a read-write property that the primary only exposes read-only) is unlikely but worth a comment at minimum, or an explicit guard in TryGetSecondaryMemberId to give a cleaner error.
Minor: HasSecondaryInterface is not used in the generated code
MockEngine.SecondaryInterfaces.cs adds HasSecondaryInterface, but scanning the generated snapshots and the __Id resolver emitted by EmitSecondaryMemberIdResolver shows it's not called anywhere in the PR. If it's intended as a future API hook, a note would help; if it's dead code from an earlier draft, it could be removed to keep surface area minimal.
Minor: name-collision prefix breaks ComputeMemberIdMap lookup
In BuildPairModel, a secondary member whose name collides with the primary is renamed (m with { Name = $"{shortName}_{m.Name}" }). However, the renamed model still carries the original MemberId (the standalone ordinal), and ComputeMemberIdMap matches by GetMethodSignatureKey / GetPropertySignatureKey which use the original name — so the map computation is correct. But the renamed model's Name field is now inconsistent with the signature key used for matching, which could confuse future readers. A comment linking the two places would be worthwhile.
Minor: new int[] { ... } in generated code
The snapshot in Multi_Interface_Mock_With_Secondary_Setup_Surface.verified.txt shows:
engine.RegisterSecondaryInterface(typeof(global::IMultiDisposable), new int[] { 2, 3 });Since the project targets net8+, this could use collection expression syntax ([2, 3]), matching the style used elsewhere in the generated code. Not a correctness issue.
Test coverage
The 17 runtime tests in MultipleInterfaceSecondarySetupTests cover the important cases thoroughly: the DbContext-shaped explicit impl, non-virtual blocker, constructor args, generic secondary interfaces, cross-combo pair reuse, collision prefixing, wrong-mock guard, and the dedup/order invariant. The snapshot tests validate three representative generator outputs. The coverage looks solid for an initial implementation.
Overall this is high-quality work that closes a real gap. The main thing worth addressing before merge is the setter-slot silent failure in ComputeMemberIdMap.
Not up to standards ⛔🔴 Issues
|
| Category | Results |
|---|---|
| UnusedCode | 1 minor |
| BestPractice | 1 minor |
| ErrorProne | 4 high |
| CodeStyle | 20 minor |
🟢 Metrics 116 complexity
Metric Results Complexity 116
NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.
- Dedupe the three Mock.Of<T1..T4> multi factory bodies into OfMulti<T1> - Drop unused MockEngine.HasSecondaryInterface and the redundant MockTypeModel.SecondaryInterfaceFqn field (AdditionalInterfaceNames[0]) - Replace the per-mock Dictionary<Type,int[]> with a flat pair array probed by reference equality; emit member-ID maps as static readonly fields so mock creation registers shared arrays instead of allocating new ones - Hoist per-combo invariants (union lookups, primary surface index) out of the per-interface loop in pair-model construction; compute signature keys in one pass - Secondary extensions look the engine up once and pass it to __Id instead of resolving it per call - Thread DiscoveryState through ProcessClassMembers and the static-abstract collectors instead of unpacking ten parameters - Share the configurable-surface property predicate between the members builder and the rename logic (was duplicated and already drifting) - Make BuildPartialMockImpl property dispatch mirror its method/event siblings; unconditional composite safe name in the members builder
There was a problem hiding this comment.
Follow-up review — checking previous findings
Comparing against my prior review to track what was addressed.
✅ Addressed: HasSecondaryInterface removed
The unused HasSecondaryInterface method is no longer in the diff. Clean.
⚠️ Still open: misleading error for unmapped setter slots
The ComputeMemberIdMap setter-slot issue remains. When a secondary interface has a read-write property but the union deduplicated it onto a primary getter-only property, map[setterMemberId] stays -1. TryGetSecondaryMemberId now correctly returns false for -1 entries (the bounds+sign guard added is correct), but the caller — __Id in every generated secondary surface file — still throws:
throw new InvalidOperationException(
"This mock was not created with 'IFoo' as a secondary interface. Create it with Mock.Of<T1, IFoo>()...");The mock was created with that interface; the setter just doesn't exist on the primary. This is the wrong error for the situation. The fix would be distinguishing the two failure modes in TryGetSecondaryMemberId (or its caller):
// Option A: two-result enum returned from TryGetSecondaryMemberId
public SecondaryMemberLookupResult TryGetSecondaryMemberId(Type interfaceType, int localMemberId, out int memberId)
// -> NotRegistered | MemberUnmapped | Ok
// Option B: separate HasSecondaryInterface check before throwing
if (!engine.HasSecondaryInterface(typeof(IFoo)))
throw new InvalidOperationException("Create it with Mock.Of<T1, IFoo>()...");
else
throw new InvalidOperationException("IFoo is registered but member X has no setup surface (e.g. setter not available on primary)");This is still worth fixing before merge — the scenario is possible when a class primary exposes a read-only property that the secondary interface declares as read-write.
Minor: new int[] { ... } in generator still unaddressed
MockFactoryBuilder.EmitSecondaryInterfaceMapFields (line ~1079 in the diff) still emits new int[] { 2, 3 }. This projects to net8+ so collection expressions ([2, 3]) are fine. Not blocking, but was called out previously and the snapshots would need to be re-accepted after the change — easy to batch with the setter fix.
Minor: name-collision rename / signature-key comment still missing
The observation from the prior review stands: BuildPairModel renames colliding members (m with { Name = $"{shortName}_{m.Name}" }) but ComputeMemberIdMap matches by original signature key, so the renamed Name field is inconsistent with the lookup key. A one-line comment at the rename site saying "Name only; MemberId and signature key remain on the original for ComputeMemberIdMap" would save a future reader the confusion. Still minor, not blocking.
Overall
The core design is solid and the critical removal (HasSecondaryInterface) was done. The main open item before merge is the setter-slot error message — it's rare but when it fires it will actively mislead the developer. The two minor items (collection expressions, rename comment) can be done in a follow-up if preferred.
Review feedback: a -1 map slot previously threw "this mock was not created with X as a secondary interface" even when it was. Re-introduce MockEngine.HasSecondaryInterface (now called by generated code) and branch the message: missing interface gets the Mock.Of<> hint, registered-but- unmapped gets an honest "no setup mapping" error. Also: ordinal comparers on the union lookup dictionaries, and a comment at the rename site noting ComputeMemberIdMap correlates by the original signature key.
|
Addressed the follow-up review in 32d921e: Setter-slot / unmapped-member error — fixed via your Option B. Rename/signature-key comment — added at the rename site in Collection expressions in generated code — declining this one: generated code compiles inside consumer projects whose |
There was a problem hiding this comment.
Follow-up review — all previous findings resolved
Checking against my prior review.
Setter-slot / unmapped-member error — fixed
The Option B fix is correctly implemented. HasSecondaryInterface is re-added to MockEngine.SecondaryInterfaces.cs with a focused contract (checking the flat _secondaryMemberIdMaps pair array by reference equality), and the generated __Id resolver in the snapshots now calls it to branch between the two failure modes:
throw new InvalidOperationException(engine.HasSecondaryInterface(typeof(IMultiDisposable))
? "Member #" + localId + " of 'IMultiDisposable' has no setup mapping on this mock instance..."
: "This mock was not created with 'IMultiDisposable' as a secondary interface. Create it with Mock.Of<...>()...");The snapshot at Multi_Interface_Mock_With_Secondary_Setup_Surface.verified.txt line 90 confirms the generated code reflects this. Good — this path is currently unreachable through the generated extensions (the comment in the PR response is accurate), but if emission ever changes the error is now honest.
Rename/signature-key comment — added
The clarifying comment at the rename site in SecondarySurfaceFactory.cs ("Rename changes the extension's Name only; MemberId stays the standalone ordinal and ComputeMemberIdMap correlates by the ORIGINAL signature key") is in place. Clear and sufficient.
Collection expressions — declined (accepted)
The reasoning is sound: generated code compiles in consumer projects with unknown LangVersion, so staying with new T[] { ... } / Array.Empty<T>() keeps the emitted style safe and consistent. No issue.
Overall
All findings from the previous two reviews are resolved. The implementation is solid: the core design is correct, the error surfaces are honest, test coverage is thorough, and the snapshots are updated. This is ready to merge.
Updated [defaultdocumentation.console](https://github.com/Doraku/DefaultDocumentation) from 1.2.2 to 1.2.5. <details> <summary>Release notes</summary> _Sourced from [defaultdocumentation.console's releases](https://github.com/Doraku/DefaultDocumentation/releases)._ ## 1.2.5 ## Bug fixes - fixed nint and nuint handling (#255) - replaced HTML numeric entities with literal Unicode arrows - [api nuget package](https://www.nuget.org/packages/DefaultDocumentation.Api/1.2.5) - [markdown nuget package](https://www.nuget.org/packages/DefaultDocumentation.Markdown/1.2.5) - [msbuild task nuget package](https://www.nuget.org/packages/DefaultDocumentation/1.2.5) - [dotnet tool nuget package](https://www.nuget.org/packages/DefaultDocumentation.Console/1.2.5) ## 1.2.4 - fixed msbuild task issue (#237) - [api nuget package](https://www.nuget.org/packages/DefaultDocumentation.Api/1.2.4) - [markdown nuget package](https://www.nuget.org/packages/DefaultDocumentation.Markdown/1.2.4) - [msbuild task nuget package](https://www.nuget.org/packages/DefaultDocumentation/1.2.4) - [dotnet tool nuget package](https://www.nuget.org/packages/DefaultDocumentation.Console/1.2.4) ## 1.2.3 - added net10 support for DefaultDocumentation.Console - fixed ValueType appearing in definition constrains - [api nuget package](https://www.nuget.org/packages/DefaultDocumentation.Api/1.2.3) - [markdown nuget package](https://www.nuget.org/packages/DefaultDocumentation.Markdown/1.2.3) - [msbuild task nuget package](https://www.nuget.org/packages/DefaultDocumentation/1.2.3) - [dotnet tool nuget package](https://www.nuget.org/packages/DefaultDocumentation.Console/1.2.3) Commits viewable in [compare view](https://github.com/Doraku/DefaultDocumentation/compare/1.2.2...1.2.5). </details> Updated [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest) from 18.6.0 to 18.8.1. <details> <summary>Release notes</summary> _Sourced from [Microsoft.NET.Test.Sdk's releases](https://github.com/microsoft/vstest/releases)._ ## 18.8.1 ## What's Changed * Fix protocol negotiation timeout when STJ reflection is disabled (18.8.1) by @nohwnd in https://github.com/microsoft/vstest/pull/16281 **Full Changelog**: https://github.com/microsoft/vstest/compare/v18.8.0...v18.8.1 ## 18.8.0 ## What's Changed * Migrate from Newtonsoft.Json to System.Text.Json / Jsonite (merge to main) by @nohwnd in https://github.com/microsoft/vstest/pull/15687 - For more detail refer to https://devblogs.microsoft.com/dotnet/vs-test-is-removing-its-newtonsoft-json-dependency/ * Create source-only filter package by @Youssef1313 in https://github.com/microsoft/vstest/pull/15638 * Add ARM64 msdia140.dll support to test platform packages by @nohwnd in https://github.com/microsoft/vstest/pull/15692 * Fix mutex cleanup crash on macOS/Linux by @nohwnd in https://github.com/microsoft/vstest/pull/15684 * Restrict artifact temp directory permissions on Unix by @nohwnd in https://github.com/microsoft/vstest/pull/15729 * Add support for filtering uncategorized tests with TestCategory=None by @Evangelink in https://github.com/microsoft/vstest/pull/15727 * Fix SCI binding failure in DTA hosts (main) by @nohwnd in https://github.com/microsoft/vstest/pull/15724 * Fix HTML logger parallel file collision by @nohwnd in https://github.com/microsoft/vstest/pull/15435 * Improve error message when testhost cannot be found by @nohwnd in https://github.com/microsoft/vstest/pull/16053 * Fix HTML logger exception on invalid XML chars in test display names by @nohwnd in https://github.com/microsoft/vstest/pull/16051 **Full Changelog**: https://github.com/microsoft/vstest/compare/v18.7.0...v18.8.0 ## 18.7.0 ## What's Changed * Add ARM64 msdia140.dll support to test platform packages by @jamesmcroft in https://github.com/microsoft/vstest/pull/15689 * Update System.Memory from 4.5.5 to 4.6.3 by @nohwnd in https://github.com/microsoft/vstest/pull/15706 ## New Contributors * @jamesmcroft made their first contribution in https://github.com/microsoft/vstest/pull/15689 **Full Changelog**: https://github.com/microsoft/vstest/compare/v18.6.0...v18.7.0 Commits viewable in [compare view](https://github.com/microsoft/vstest/compare/v18.6.0...v18.8.1). </details> Updated [Microsoft.SourceLink.GitHub](https://github.com/dotnet/dotnet) from 10.0.300 to 10.0.301. <details> <summary>Release notes</summary> _Sourced from [Microsoft.SourceLink.GitHub's releases](https://github.com/dotnet/dotnet/releases)._ ## 10.0.301 You can build .NET 10.0 from the repository by cloning the release tag `v10.0.301` and following the build instructions in the [main README.md](https://github.com/dotnet/dotnet/blob/v10.0.301/README.md#building). Alternatively, you can build from the sources attached to this release directly. More information on this process can be found in the [dotnet/dotnet repository](https://github.com/dotnet/dotnet/blob/v10.0.301/README.md#building-from-released-sources). Attached are PGP signatures for the GitHub generated tarball and zipball. You can find the public key at https://dot.net/release-key-2023 Commits viewable in [compare view](https://github.com/dotnet/dotnet/compare/v10.0.300...v10.0.301). </details> Updated [nbgv](https://github.com/dotnet/Nerdbank.GitVersioning) from 3.7.115 to 3.10.91. <details> <summary>Release notes</summary> _Sourced from [nbgv's releases](https://github.com/dotnet/Nerdbank.GitVersioning/releases)._ ## 3.10.91 ## What's Changed * Retry file operations on access denied errors by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1408 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.10.85...v3.10.91 ## 3.10.85 ## What's Changed * Avoid writing server.json multiple times in a single pack by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1391 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.10.70...v3.10.85 ## 3.10.70 ## What's Changed ### Fixes * Fix case insensitivity for the managed engine on git worktrees, and implement for libgit2 by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1334 * Fix native heap corruption in GitPackIndexMappedReaderTests by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1360 ### Enhancements * Add prerelease property to inheriting version.json files by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1317 * Add NBGV_SetCloudBuildVersionVars property to disable cloud build variable output by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1324 * Add --what-if option to prepare-release command for simulating version changes by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1242 * Build nbgv CLI tool for .NET 9 and 10 by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1369 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.9.50...v3.10.70 ## 3.10.44-alpha ## What's Changed ### Fixes * Fix case insensitivity for the managed engine on git worktrees, and implement for libgit2 by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1334 ### Enhancements * Add --what-if option to prepare-release command for simulating version changes by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1242 * Add NBGV_SetCloudBuildVersionVars property to disable cloud build variable output by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1324 ### Dependency updates * chore(deps): update dependency microsoft.build.locator to 1.11.2 by @renovate[bot] in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1304 * chore(deps): update dotnet monorepo by @renovate[bot] in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1309 * Update dotnet monorepo by @renovate[bot] in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1338 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.10.8-alpha...v3.10.44-alpha ## 3.10.8-alpha ## What's Changed * Add prerelease property to inheriting version.json files by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1317 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.9.50...v3.10.8-alpha ## 3.9.50 ## What's Changed * Add `versionHeightOffsetAppliesTo` property to version.json by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1279 * Fix `nbgv prepare-release` command to honor inheriting version.json files by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1281 * Automatically disable git engine for Dependabot environments by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1284 * Add --what-if switch to nbgv tag command to preview tag names by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1287 * Auto-disable git engine for GitHub Copilot environments by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1291 * Allow uppercase letters in pre-release version identifiers by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1293 ## New Contributors * @micheloliveira-com made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1277 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.8.118...v3.9.50 ## 3.9.37-alpha ## What's Changed * Auto-disable git engine for GitHub Copilot environments by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1291 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.9.32-alpha...v3.9.37-alpha ## 3.9.32-alpha ## What's Changed * Automatically disable git engine for Dependabot environments by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1284 * Add --what-if switch to nbgv tag command to preview tag names by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1287 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.9.17-alpha...v3.9.32-alpha ## 3.9.17-alpha ## What's Changed * Fix `nbgv prepare-release` command to honor inheriting version.json files by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1281 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.9.15-alpha...v3.9.17-alpha ## 3.9.15-alpha ## What's Changed * Add `versionHeightOffsetAppliesTo` property to version.json by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1279 ## New Contributors * @micheloliveira-com made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1277 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.8.118...v3.9.15-alpha ## 3.8.118 ## Fixes * Don't try to disable CA2243 warnings in the generated version info files for F# by @Numpsy in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1174 * Catch a more general JsonException. by @ANGEL-OF-DEV in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1191 * Retarget links to migrated docs by @bencemali in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1193 * Check MSBuild items with case insensitivity by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1213 * Fix inconsistent CLI output format for GitCommitDate by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1246 * Fix version height computed as 0 when project path has non-canonical casing by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1244 * When generating the GitCommitDate field in the AssemblyInfo for F#, d… by @Numpsy in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1253 * Only do Android version check on applications by @dotMorten in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1256 * Fix `nbgv set-version` to write to the best version.json file in scope by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1264 ## Enhancements * Add msbuild-provided prerelease identifiers by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1153 * Add support for stamping version on server.json for MCP servers with 0.0.0-placeholder replacement by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1270 and by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1271 * Add option to set / skip CloudBuildNumber by @MattKotsenas in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1190 * Add Central Package Management (CPM) support to nbgv install command by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1208 * Add --public-release argument to nbgv get-version command by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1245 * Invoke PrivateP2PCaching.proj fewer times by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1263 ## Other changes * Update dependency Cake.Core to v5 by @renovate[bot] in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1183 ## New Contributors * @ANGEL-OF-DEV made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1191 * @bencemali made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1193 * @Copilot made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1208 * @dotMorten made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1256 * @emmanuel-ferdman made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1145 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.7.115...v3.8.118 ## 3.8.106-alpha ## What's Changed ### Enhancements * Add option to set / skip CloudBuildNumber by @MattKotsenas in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1190 * Add Central Package Management (CPM) support to nbgv install command by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1208 * Add --public-release argument to nbgv get-version command by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1245 * Invoke PrivateP2PCaching.proj fewer times by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1263 ### Fixes * Catch a more general JsonException. by @ANGEL-OF-DEV in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1191 * Retarget links to migrated docs by @bencemali in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1193 * Check MSBuild items with case insensitivity by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1213 * Fix inconsistent CLI output format for GitCommitDate by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1246 * Fix version height computed as 0 when project path has non-canonical casing by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1244 * When generating the GitCommitDate field in the AssemblyInfo for F#, d… by @Numpsy in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1253 * Only do Android version check on applications by @dotMorten in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1256 * Fix `nbgv set-version` to write to the best version.json file in scope by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1264 ### Other changes * Update dependency Cake.Core to v5 by @renovate[bot] in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1183 ## New Contributors * @ANGEL-OF-DEV made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1191 * @bencemali made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1193 * @Copilot made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1208 * @dotMorten made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1256 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.8.38-alpha...v3.8.106-alpha ## 3.8.38-alpha ## Fixes * Don't try to disable CA2243 warnings in the generated version info files for F# by @Numpsy in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1174 ## Enhancements * Add msbuild-provided prerelease identifiers by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1153 ## New Contributors * @emmanuel-ferdman made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1145 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.7.115...v3.8.38-alpha Commits viewable in [compare view](https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.7.115...v3.10.91). </details> Updated [Nerdbank.GitVersioning](https://github.com/dotnet/Nerdbank.GitVersioning) from 3.7.115 to 3.10.91. <details> <summary>Release notes</summary> _Sourced from [Nerdbank.GitVersioning's releases](https://github.com/dotnet/Nerdbank.GitVersioning/releases)._ ## 3.10.91 ## What's Changed * Retry file operations on access denied errors by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1408 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.10.85...v3.10.91 ## 3.10.85 ## What's Changed * Avoid writing server.json multiple times in a single pack by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1391 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.10.70...v3.10.85 ## 3.10.70 ## What's Changed ### Fixes * Fix case insensitivity for the managed engine on git worktrees, and implement for libgit2 by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1334 * Fix native heap corruption in GitPackIndexMappedReaderTests by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1360 ### Enhancements * Add prerelease property to inheriting version.json files by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1317 * Add NBGV_SetCloudBuildVersionVars property to disable cloud build variable output by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1324 * Add --what-if option to prepare-release command for simulating version changes by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1242 * Build nbgv CLI tool for .NET 9 and 10 by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1369 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.9.50...v3.10.70 ## 3.10.44-alpha ## What's Changed ### Fixes * Fix case insensitivity for the managed engine on git worktrees, and implement for libgit2 by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1334 ### Enhancements * Add --what-if option to prepare-release command for simulating version changes by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1242 * Add NBGV_SetCloudBuildVersionVars property to disable cloud build variable output by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1324 ### Dependency updates * chore(deps): update dependency microsoft.build.locator to 1.11.2 by @renovate[bot] in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1304 * chore(deps): update dotnet monorepo by @renovate[bot] in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1309 * Update dotnet monorepo by @renovate[bot] in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1338 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.10.8-alpha...v3.10.44-alpha ## 3.10.8-alpha ## What's Changed * Add prerelease property to inheriting version.json files by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1317 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.9.50...v3.10.8-alpha ## 3.9.50 ## What's Changed * Add `versionHeightOffsetAppliesTo` property to version.json by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1279 * Fix `nbgv prepare-release` command to honor inheriting version.json files by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1281 * Automatically disable git engine for Dependabot environments by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1284 * Add --what-if switch to nbgv tag command to preview tag names by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1287 * Auto-disable git engine for GitHub Copilot environments by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1291 * Allow uppercase letters in pre-release version identifiers by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1293 ## New Contributors * @micheloliveira-com made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1277 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.8.118...v3.9.50 ## 3.9.37-alpha ## What's Changed * Auto-disable git engine for GitHub Copilot environments by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1291 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.9.32-alpha...v3.9.37-alpha ## 3.9.32-alpha ## What's Changed * Automatically disable git engine for Dependabot environments by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1284 * Add --what-if switch to nbgv tag command to preview tag names by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1287 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.9.17-alpha...v3.9.32-alpha ## 3.9.17-alpha ## What's Changed * Fix `nbgv prepare-release` command to honor inheriting version.json files by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1281 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.9.15-alpha...v3.9.17-alpha ## 3.9.15-alpha ## What's Changed * Add `versionHeightOffsetAppliesTo` property to version.json by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1279 ## New Contributors * @micheloliveira-com made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1277 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.8.118...v3.9.15-alpha ## 3.8.118 ## Fixes * Don't try to disable CA2243 warnings in the generated version info files for F# by @Numpsy in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1174 * Catch a more general JsonException. by @ANGEL-OF-DEV in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1191 * Retarget links to migrated docs by @bencemali in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1193 * Check MSBuild items with case insensitivity by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1213 * Fix inconsistent CLI output format for GitCommitDate by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1246 * Fix version height computed as 0 when project path has non-canonical casing by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1244 * When generating the GitCommitDate field in the AssemblyInfo for F#, d… by @Numpsy in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1253 * Only do Android version check on applications by @dotMorten in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1256 * Fix `nbgv set-version` to write to the best version.json file in scope by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1264 ## Enhancements * Add msbuild-provided prerelease identifiers by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1153 * Add support for stamping version on server.json for MCP servers with 0.0.0-placeholder replacement by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1270 and by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1271 * Add option to set / skip CloudBuildNumber by @MattKotsenas in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1190 * Add Central Package Management (CPM) support to nbgv install command by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1208 * Add --public-release argument to nbgv get-version command by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1245 * Invoke PrivateP2PCaching.proj fewer times by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1263 ## Other changes * Update dependency Cake.Core to v5 by @renovate[bot] in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1183 ## New Contributors * @ANGEL-OF-DEV made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1191 * @bencemali made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1193 * @Copilot made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1208 * @dotMorten made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1256 * @emmanuel-ferdman made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1145 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.7.115...v3.8.118 ## 3.8.106-alpha ## What's Changed ### Enhancements * Add option to set / skip CloudBuildNumber by @MattKotsenas in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1190 * Add Central Package Management (CPM) support to nbgv install command by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1208 * Add --public-release argument to nbgv get-version command by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1245 * Invoke PrivateP2PCaching.proj fewer times by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1263 ### Fixes * Catch a more general JsonException. by @ANGEL-OF-DEV in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1191 * Retarget links to migrated docs by @bencemali in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1193 * Check MSBuild items with case insensitivity by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1213 * Fix inconsistent CLI output format for GitCommitDate by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1246 * Fix version height computed as 0 when project path has non-canonical casing by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1244 * When generating the GitCommitDate field in the AssemblyInfo for F#, d… by @Numpsy in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1253 * Only do Android version check on applications by @dotMorten in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1256 * Fix `nbgv set-version` to write to the best version.json file in scope by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1264 ### Other changes * Update dependency Cake.Core to v5 by @renovate[bot] in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1183 ## New Contributors * @ANGEL-OF-DEV made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1191 * @bencemali made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1193 * @Copilot made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1208 * @dotMorten made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1256 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.8.38-alpha...v3.8.106-alpha ## 3.8.38-alpha ## Fixes * Don't try to disable CA2243 warnings in the generated version info files for F# by @Numpsy in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1174 ## Enhancements * Add msbuild-provided prerelease identifiers by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1153 ## New Contributors * @emmanuel-ferdman made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1145 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.7.115...v3.8.38-alpha Commits viewable in [compare view](https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.7.115...v3.10.91). </details> Updated [NexusLabs.Framework.Analyzers](https://github.com/ncosentino/NexusLabs.Framework) from 0.2.6 to 0.2.9. <details> <summary>Release notes</summary> _Sourced from [NexusLabs.Framework.Analyzers's releases](https://github.com/ncosentino/NexusLabs.Framework/releases)._ No release notes found for this version range. Commits viewable in [compare view](https://github.com/ncosentino/NexusLabs.Framework/commits). </details> Updated [TUnit](https://github.com/thomhurst/TUnit) from 1.53.0 to 1.63.0. <details> <summary>Release notes</summary> _Sourced from [TUnit's releases](https://github.com/thomhurst/TUnit/releases)._ ## 1.63.0 <!-- Release notes generated using configuration in .github/release.yml at v1.63.0 --> ## What's Changed ### Other Changes * fix(mocks): dispatch abstract indexers through the engine instead of calling base by @thomhurst in https://github.com/thomhurst/TUnit/pull/6517 * feat(mocks): experimental compile-time internals access (#6514 Tier 2) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6520 * feat(mocks): make the async-factory Returns alias available below net9.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6518 * +semver:minor - feat(mocks): runtime auto-stubs for interfaces the source generator cannot see by @thomhurst in https://github.com/thomhurst/TUnit/pull/6519 ### Dependencies * chore(deps): update tunit to 1.62.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6508 * chore(deps): update dependency mockolate to 3.4.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6512 * chore(deps): update dependency cliwrap to 3.10.4 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6513 * chore(deps): update dependency stackexchange.redis to 3.0.25 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6522 * chore(deps): update dependency brace-expansion to v5.0.9 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6523 * chore(deps): update dependency microsoft.build.utilities.core to v18 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6525 **Full Changelog**: https://github.com/thomhurst/TUnit/compare/v1.62.0...v1.63.0 ## 1.62.0 <!-- Release notes generated using configuration in .github/release.yml at v1.62.0 --> ## What's Changed ### Other Changes * fix(docs): make Mermaid lifecycle diagrams readable by @thomhurst in https://github.com/thomhurst/TUnit/pull/6485 * fix(mocks): strip nullable annotation from constructor dispatch patterns by @thomhurst in https://github.com/thomhurst/TUnit/pull/6498 * fix(mocks): skip interfaces with inaccessible abstract members by @thomhurst in https://github.com/thomhurst/TUnit/pull/6502 * feat(mocks): accept an async factory in Returns() on async members by @thomhurst in https://github.com/thomhurst/TUnit/pull/6503 * fix(mocks): report TM006 instead of CS1729 for unsubclassable classes by @thomhurst in https://github.com/thomhurst/TUnit/pull/6501 * fix(mocks): emit the setup surface into the globally-imported namespace by @thomhurst in https://github.com/thomhurst/TUnit/pull/6504 * fix(mocks): reference TUnit.Mocks once in snapshot test compilations by @thomhurst in https://github.com/thomhurst/TUnit/pull/6506 * fix(mocks): make generated identifier sanitization injective by @thomhurst in https://github.com/thomhurst/TUnit/pull/6507 ### Dependencies * chore(deps): update tunit to 1.61.38 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6479 * chore(deps): update dependency brace-expansion to v5.0.8 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6478 * chore(deps): update dependency cliwrap to 3.10.3 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6482 * chore(deps): bump postcss from 8.5.10 to 8.5.22 in /docs by @dependabot[bot] in https://github.com/thomhurst/TUnit/pull/6480 * chore(deps): update dependency fscheck to 3.3.4 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6486 * chore(deps): update dependency minimatch to v10.2.6 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6490 * chore(deps): update actions/stale action to v11 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6496 * chore(deps): update microsoft.testing to 2.3.3 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6499 * chore(deps): update mstest to 4.3.3 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6500 **Full Changelog**: https://github.com/thomhurst/TUnit/compare/v1.61.38...v1.62.0 ## 1.61.38 <!-- Release notes generated using configuration in .github/release.yml at v1.61.38 --> ## What's Changed ### Other Changes * fix: apply 'unmanaged' constraint handling to remaining source generators by @thomhurst in https://github.com/thomhurst/TUnit/pull/6474 * feat: expose data source attributes on TestContext by @thomhurst in https://github.com/thomhurst/TUnit/pull/6477 ### Dependencies * chore(deps): update tunit to 1.61.35 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6475 **Full Changelog**: https://github.com/thomhurst/TUnit/compare/v1.61.35...v1.61.38 ## 1.61.35 <!-- Release notes generated using configuration in .github/release.yml at v1.61.35 --> ## What's Changed ### Other Changes * fix(mocks): omit 'struct' constraint when type parameter has 'unmanaged' constraint by @thomhurst in https://github.com/thomhurst/TUnit/pull/6473 ### Dependencies * chore(deps): bump fast-uri from 3.1.2 to 3.1.4 in /docs by @dependabot[bot] in https://github.com/thomhurst/TUnit/pull/6466 * chore(deps): update tunit to 1.61.29 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6467 * chore(deps): update dependency verify.tool to v0.8.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6470 * chore(deps): update dependency docusaurus-plugin-llms to ^0.5.1 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6472 **Full Changelog**: https://github.com/thomhurst/TUnit/compare/v1.61.29...v1.61.35 ## 1.61.29 <!-- Release notes generated using configuration in .github/release.yml at v1.61.29 --> ## What's Changed ### Other Changes * perf: remove EnumerableAsyncProcessor dependency by @thomhurst in https://github.com/thomhurst/TUnit/pull/6465 ### Dependencies * chore(deps): bump shell-quote from 1.8.4 to 1.10.0 in /docs by @dependabot[bot] in https://github.com/thomhurst/TUnit/pull/6462 * chore(deps): bump body-parser from 1.20.5 to 1.20.6 in /docs by @dependabot[bot] in https://github.com/thomhurst/TUnit/pull/6461 * chore(deps): bump webpack-dev-server from 5.2.5 to 5.2.6 in /docs by @dependabot[bot] in https://github.com/thomhurst/TUnit/pull/6460 * chore(deps): update dependency microsoft.kiota.abstractions to v2 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6464 * chore(deps): update tunit to 1.61.23 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6463 **Full Changelog**: https://github.com/thomhurst/TUnit/compare/v1.61.23...v1.61.29 ## 1.61.23 <!-- Release notes generated using configuration in .github/release.yml at v1.61.23 --> ## What's Changed ### Other Changes * fix(mocks): emit 'where T : default' for interface-constrained generic methods by @thomhurst in https://github.com/thomhurst/TUnit/pull/6458 ### Dependencies * chore(deps): update tunit to 1.61.15 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6450 * chore(deps): update actions/checkout action to v7.0.1 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6453 * chore(deps): update verify to 31.26.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6454 * chore(deps): update verify to 31.27.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6457 * chore(deps): update react to ^19.2.8 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6459 **Full Changelog**: https://github.com/thomhurst/TUnit/compare/v1.61.15...v1.61.23 ## 1.61.15 <!-- Release notes generated using configuration in .github/release.yml at v1.61.15 --> ## What's Changed ### Other Changes * feat: Allow disabling the automatic html report upload to upload-artifacts@v7 by @Crashdummyy in https://github.com/thomhurst/TUnit/pull/6447 * fix: stop retrying artifact upload on non-retryable status codes by @thomhurst in https://github.com/thomhurst/TUnit/pull/6449 ### Dependencies * chore(deps): update tunit to 1.61.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6437 * chore(deps): update verify to 31.24.3 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6438 * chore(deps): update dependency opentelemetry.instrumentation.aspnetcore to 1.17.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6440 * chore(deps): update verify to 31.25.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6442 * chore(deps): update dependency docusaurus-plugin-llms to ^0.5.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6443 * chore(deps): update opentelemetry to 1.17.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6441 ## New Contributors * @Crashdummyy made their first contribution in https://github.com/thomhurst/TUnit/pull/6447 **Full Changelog**: https://github.com/thomhurst/TUnit/compare/v1.61.0...v1.61.15 ## 1.61.0 <!-- Release notes generated using configuration in .github/release.yml at v1.61.0 --> ## What's Changed ### Other Changes * docs: revamp README with feature showcase and auto-updating benchmarks by @thomhurst in https://github.com/thomhurst/TUnit/pull/6430 * docs: align docs homepage messaging with revamped README by @thomhurst in https://github.com/thomhurst/TUnit/pull/6431 * fix(engine): emit ECMA-335 metadata-format type names in TestMethodIdentifierProperty by @thomhurst in https://github.com/thomhurst/TUnit/pull/6433 * fix(benchmarks): make SetupTeardownTests JSON tests Native AOT compatible by @thomhurst in https://github.com/thomhurst/TUnit/pull/6434 * Organize repository into conventional .NET layout by @thomhurst in https://github.com/thomhurst/TUnit/pull/6435 ### Dependencies * chore(deps): update dependency polyfill to v11 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6418 * chore(deps): update dependency tunit.aspire to 1.6* by @thomhurst in https://github.com/thomhurst/TUnit/pull/6419 * chore(deps): update tunit to 1.6* by @thomhurst in https://github.com/thomhurst/TUnit/pull/6420 * chore(deps): update dependency polyfill to 11.0.1 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6421 * chore(deps): update dependency polyfill to 11.0.1 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6422 * chore(deps): update verify to 31.24.2 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6424 * chore(deps): update microsoft.build to 18.8.2 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6426 * chore(deps): update dependency microsoft.net.stringtools to 18.8.2 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6425 * chore(deps): update actions/setup-dotnet action to v6 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6427 * chore(deps): bump websocket-driver from 0.7.4 to 0.7.5 in /docs by @dependabot[bot] in https://github.com/thomhurst/TUnit/pull/6429 * chore(deps): update opentelemetry to 1.17.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6432 **Full Changelog**: https://github.com/thomhurst/TUnit/compare/v1.60.0...v1.61.0 ## 1.60.0 <!-- Release notes generated using configuration in .github/release.yml at v1.60.0 --> ## What's Changed ### Other Changes * feat: cross-process test report aggregation — merged HTML report + single GitHub summary by @thomhurst in https://github.com/thomhurst/TUnit/pull/6415 ### Dependencies * chore(deps): update tunit to 1.59.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6398 * chore(deps): update verify to 31.24.1 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6399 * chore(deps): update microsoft.testing to 2.3.2 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6401 * chore(deps): update mstest to 4.3.2 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6402 * chore(deps): update actions/setup-node action to v7 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6403 * chore(deps): update dependency microsoft.net.test.sdk to 18.8.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6404 * chore(deps): update dependency microsoft.net.test.sdk to 18.8.1 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6405 * chore(deps): update dependency fsharp.core to 10.1.302 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6406 * chore(deps): update dependency microsoft.templateengine.authoring.cli to v10.0.302 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6407 * chore(deps): update dependency microsoft.entityframeworkcore to 10.0.10 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6410 * chore(deps): update dependency dotnet-sdk to v10.0.302 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6409 * chore(deps): update dependency system.commandline to 2.0.10 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6412 * chore(deps): update dependency microsoft.templateengine.authoring.templateverifier to 10.0.302 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6411 * chore(deps): update microsoft.aspnetcore to 10.0.10 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6413 * chore(deps): update microsoft.extensions to 10.0.10 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6414 * chore(deps): update microsoft.extensions to 10.8.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6416 * chore(deps): update dependency polyfill to v11 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6417 **Full Changelog**: https://github.com/thomhurst/TUnit/compare/v1.59.0...v1.60.0 ## 1.59.0 <!-- Release notes generated using configuration in .github/release.yml at v1.59.0 --> ## What's Changed ### Other Changes * Fix typed MethodDataSource provider instances by @thomhurst in https://github.com/thomhurst/TUnit/pull/6378 * Fix instance MethodDataSource isolation by @thomhurst in https://github.com/thomhurst/TUnit/pull/6379 * fix(mocks): CS9262 in generated mock members on VS 17.14 (Roslyn 4.14) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6392 * Remove EqualTo alias documentation by @thomhurst in https://github.com/thomhurst/TUnit/pull/6396 * fix(aspnetcore): guard hosted-service stop against concurrent double Host.StopAsync by @thomhurst in https://github.com/thomhurst/TUnit/pull/6397 * Add single-item assertion chaining by @thomhurst in https://github.com/thomhurst/TUnit/pull/6395 * Improve test framework migrations by @thomhurst in https://github.com/thomhurst/TUnit/pull/6381 * Add -f/--framework support to TUnit template with .NET Framework handling by @thomhurst with @Copilot in https://github.com/thomhurst/TUnit/pull/6262 ### Dependencies * chore(deps): update tunit to 1.58.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6351 * chore(deps): update dependency tunit.core to 1.58.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6352 * chore(deps): update dependency picomatch to v4.0.5 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6354 * chore(deps): update dependency testcontainers.postgresql to 4.13.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6356 * chore(deps): update dependency testcontainers.redis to 4.13.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6357 * chore(deps): update dependency testcontainers.kafka to 4.13.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6355 * chore(deps): update dependency gitversion.tool to v6.8.1 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6359 * chore(deps): update dependency typescript to v7 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6372 * chore(deps): update mstest to 4.3.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6374 * chore(deps): update dependency messagepack to 3.1.8 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6376 * chore(deps): update dependency opentelemetry.instrumentation.runtime to 1.16.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6380 * chore(deps): update dependency vogen to 8.0.6 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6382 * chore(deps): update dependency gitversion.tool to v6.8.2 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6384 * chore(deps): update dependency npgsql.entityframeworkcore.postgresql to 10.0.3 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6385 * chore(deps): update docusaurus to v3.10.2 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6386 * chore(deps): update dependency stackexchange.redis to 3.0.17 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6387 * chore(deps): update dependency dompurify to v3.4.12 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6389 * chore(deps): update dependency svgo to v4.0.2 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6390 * chore(deps): update dependency nsubstitute to v6 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6394 * chore(deps): update verify to 31.24.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6367 * chore(deps): update microsoft.testing by @thomhurst in https://github.com/thomhurst/TUnit/pull/6369 **Full Changelog**: https://github.com/thomhurst/TUnit/compare/v1.58.0...v1.59.0 ## 1.58.0 <!-- Release notes generated using configuration in .github/release.yml at v1.58.0 --> ## What's Changed ### Other Changes * feat(aspire): opt-in live forwarding of resource logs into test output (#6341) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6345 * fix(aspire): fail fast on Finished-state crashes during startup (#6342) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6346 * fix(engine): keep per-test timeout token source alive through teardown (#6339) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6349 * feat(aspire): resource-diagnostics helpers + retained log buffer (#6343) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6350 * feat(aspire): surface exception detail in routed OTLP logs (#6347) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6348 ### Dependencies * chore(deps): update tunit to 1.57.17 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6344 **Full Changelog**: https://github.com/thomhurst/TUnit/compare/v1.57.17...v1.58.0 ## 1.57.17 <!-- Release notes generated using configuration in .github/release.yml at v1.57.17 --> ## What's Changed ### Other Changes * fix(engine): reset test cancellation token before After hooks on timeout path (#6339) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6340 ### Dependencies * chore(deps): update tunit to 1.57.14 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6336 **Full Changelog**: https://github.com/thomhurst/TUnit/compare/v1.57.14...v1.57.17 ## 1.57.14 <!-- Release notes generated using configuration in .github/release.yml at v1.57.14 --> ## What's Changed ### Other Changes * fix(engine): apply --treenode-filter to --list-tests by @thomhurst in https://github.com/thomhurst/TUnit/pull/6334 * feat(aspire): dump resource error logs on test failure + warn on missing telemetry wiring by @thomhurst in https://github.com/thomhurst/TUnit/pull/6323 ### Dependencies * chore(deps): update dependency stackexchange.redis to 3.0.11 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6324 * chore(deps): update tunit to 1.57.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6322 * chore(deps): update dependency brace-expansion to v5.0.7 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6326 * chore(deps): update dependency polyfill to 10.11.1 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6327 * chore(deps): update dependency polyfill to 10.11.1 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6329 * chore(deps): update dependency polyfill to 10.11.2 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6330 * chore(deps): update dependency polyfill to 10.11.2 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6331 * chore(deps): update dependency serialize-javascript to v7.0.7 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6333 * chore(deps): update dependency gitversion.tool to v6.8.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6335 **Full Changelog**: https://github.com/thomhurst/TUnit/compare/v1.57.0...v1.57.14 ## 1.57.0 <!-- Release notes generated using configuration in .github/release.yml at v1.57.0 --> ## What's Changed ### Other Changes * perf(sourcegen): consolidate per-file ModuleInitializers into merged .cctor (#6226) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6286 * fix: resolve CS0121 IsEqualTo ambiguity on .NET 8 SDK (#6296) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6313 * chore(docs): apply Codacy markdownlint fixes by @thomhurst in https://github.com/thomhurst/TUnit/pull/6284 * fix(mocks): generate mock for qualified-name X.Mock() calls (#6298) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6314 ### Dependencies * chore(deps): update tunit to 1.56.35 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6306 * chore(deps): update dependency stackexchange.redis to 3.0.7 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6307 * chore(deps): update dependency opentelemetry.instrumentation.http to 1.16.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6308 * chore(deps): update dependency opentelemetry.instrumentation.aspnetcore to 1.16.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6309 * chore(deps): update dependency qs to v6.15.3 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6310 * chore(deps): update dependency polyfill to 10.11.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6312 * chore(deps): update dependency polyfill to 10.11.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6311 * chore(deps): bump http-proxy-middleware from 2.0.9 to 2.0.10 in /docs by @dependabot[bot] in https://github.com/thomhurst/TUnit/pull/6303 **Full Changelog**: https://github.com/thomhurst/TUnit/compare/v1.56.35...v1.57.0 ## 1.56.35 <!-- Release notes generated using configuration in .github/release.yml at v1.56.35 --> ## What's Changed ### Other Changes * feat(aspire): tear down Aspire on test-run abort via session cancellation token by @thomhurst in https://github.com/thomhurst/TUnit/pull/6292 ### Dependencies * chore(deps): update tunit to 1.56.25 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6294 * chore(deps): update dependency microsoft.visualstudio.threading.analyzers to v18 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6297 * chore(deps): update dependency microsoft.net.test.sdk to 18.7.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6300 * chore(deps): update dependency microsoft.playwright to 1.61.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6302 * chore(deps): update actions/cache action to v6 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6301 * chore(deps): update dependency azure.storage.blobs to 12.29.1 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6304 **Full Changelog**: https://github.com/thomhurst/TUnit/compare/v1.56.25...v1.56.35 ## 1.56.25 <!-- Release notes generated using configuration in .github/release.yml at v1.56.25 --> ## What's Changed ### Other Changes * feat(aspire): actionable diagnostics when resources fail to start by @thomhurst in https://github.com/thomhurst/TUnit/pull/6293 ### Dependencies * chore(deps): update tunit to 1.56.18 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6285 * chore(deps): update aspire to 13.4.6 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6287 * chore(deps): update dependency mockolate to 3.3.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6291 **Full Changelog**: https://github.com/thomhurst/TUnit/compare/v1.56.18...v1.56.25 ## 1.56.18 <!-- Release notes generated using configuration in .github/release.yml at v1.56.18 --> ## What's Changed ### Other Changes * fix(mocks): mock deep interface hierarchies (#6264) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6283 * feat: artifact retention for auto-uploaded HTML report (#6266) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6270 * fix(mocks): forward asymmetric `new`-hidden property slots per-accessor (#6263) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6281 * fix: honor OverloadResolutionPriority on net8 consumers (#6276, #6280) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6282 ### Dependencies * chore(deps): update tunit to 1.56.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6259 * chore(deps): update dependency streamjsonrpc to 2.25.29 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6258 * chore(deps): update aspire to 13.4.5 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6267 * chore(deps): bump launch-editor from 2.12.0 to 2.14.1 in /docs by @dependabot[bot] in https://github.com/thomhurst/TUnit/pull/6268 * chore(deps): bump @babel/core from 7.28.5 to 7.29.7 in /docs by @dependabot[bot] in https://github.com/thomhurst/TUnit/pull/6269 * chore(deps): update dependency dompurify to v3.4.11 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6271 * chore(deps): update dependency serialize-javascript to v7.0.6 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6272 * chore(deps): update actions/checkout action to v7 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6277 * chore(deps): update verify to 31.20.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6278 * chore(deps): bump webpack-dev-server from 5.2.4 to 5.2.5 in /docs by @dependabot[bot] in https://github.com/thomhurst/TUnit/pull/6273 **Full Changelog**: https://github.com/thomhurst/TUnit/compare/v1.56.0...v1.56.18 ## 1.56.0 <!-- Release notes generated using configuration in .github/release.yml at v1.56.0 --> ## What's Changed ### Other Changes * fix(aspnetcore): serialize WithWebHostBuilder to stop _derivedFactories race (flaky disposal NRE) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6251 * fix(mocks): wrap a real object whose class has no parameterless ctor (#6253) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6255 * fix(mocks): implement `new`-hidden base interface members in wrapper (#6252) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6256 * fix(mocks): mocking a method with more params than Func/Action arity (#6254) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6257 ### Dependencies * chore(deps): update tunit to 1.55.2 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6248 * chore(deps): update aspire to 13.4.4 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6249 * chore(deps): update dependency stackexchange.redis to v3 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6250 **Full Changelog**: https://github.com/thomhurst/TUnit/compare/v1.55.2...v1.56.0 ## 1.55.2 <!-- Release notes generated using configuration in .github/release.yml at v1.55.2 --> ## What's Changed ### Other Changes * fix(aspire): publish TUnit.Aspire.Core package (#6246) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6247 ### Dependencies * chore(deps): update tunit to 1.55.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6245 **Full Changelog**: https://github.com/thomhurst/TUnit/compare/v1.55.0...v1.55.2 ## 1.55.0 <!-- Release notes generated using configuration in .github/release.yml at v1.55.0 --> ## What's Changed ### Other Changes * feat(aspire): add TUnit.Aspire.Core without TUnit metapackage dependency (#5471) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6243 * fix(analyzers): scope TUnit0031 async-void rule to tests and hooks (#6190) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6244 ### Dependencies * chore(deps): update dependency streamjsonrpc to 2.25.28 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6232 * chore(deps): update tunit to 1.54.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6233 * chore(deps): bump joi from 17.13.3 to 17.13.4 in /docs by @dependabot[bot] in https://github.com/thomhurst/TUnit/pull/6234 * chore(deps): update dependency polyfill to 10.9.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6238 * chore(deps): update _tunitpolyfillversion to 10.9.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6237 * chore(deps): update dependency polyfill to 10.10.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6242 * chore(deps): update _tunitpolyfillversion to 10.10.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6241 **Full Changelog**: https://github.com/thomhurst/TUnit/compare/v1.54.0...v1.55.0 ## 1.54.0 <!-- Release notes generated using configuration in .github/release.yml at v1.54.0 --> ## What's Changed ### Other Changes * Generate collection-shape drill-in overloads (#6185) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6218 * feat(mocks): setup/verify on secondary interfaces of multi-type mocks by @thomhurst in https://github.com/thomhurst/TUnit/pull/6230 * perf: reduce allocations in source-gen test building hot paths by @thomhurst in https://github.com/thomhurst/TUnit/pull/6228 * perf: shrink generated TestEntry builder IL via shared TUnit.Core factory helpers by @thomhurst in https://github.com/thomhurst/TUnit/pull/6231 ### Dependencies * chore(deps): update tunit to 1.53.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6199 * chore(deps): update verify to 31.19.1 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6200 * chore(deps): update dependency messagepack to 3.1.7 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6203 * chore(deps): update dependency fsharp.core to 10.1.301 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6202 * chore(deps): update dependency microsoft.entityframeworkcore to 10.0.9 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6205 * chore(deps): update dependency dotnet-sdk to v10.0.301 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6204 * chore(deps): update dependency microsoft.templateengine.authoring.cli to v10.0.301 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6206 * chore(deps): update dependency microsoft.templateengine.authoring.templateverifier to 10.0.301 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6207 * chore(deps): update microsoft.aspnetcore to 10.0.9 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6209 * chore(deps): update dependency system.commandline to 2.0.9 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6208 * chore(deps): update microsoft.extensions by @thomhurst in https://github.com/thomhurst/TUnit/pull/6211 * chore(deps): update dependency dompurify to v3.4.9 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6213 * chore(deps): bump shell-quote from 1.8.3 to 1.8.4 in /docs by @dependabot[bot] in https://github.com/thomhurst/TUnit/pull/6210 * chore(deps): update dependency polly to 8.7.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6214 * chore(deps): update dependency microsoft.net.stringtools to 18.7.1 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6215 * chore(deps): update microsoft.build to 18.7.1 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6216 * chore(deps): update opentelemetry to 1.16.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6217 * chore(deps): update dependency dompurify to v3.4.10 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6229 **Full Changelog**: https://github.com/thomhurst/TUnit/compare/v1.53.0...v1.54.0 Commits viewable in [compare view](https://github.com/thomhurst/TUnit/compare/v1.53.0...v1.63.0). </details> Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Nick Cosentino <nbcosentino@gmail.com>
Closes the gap reported in discussion #4981 (comment 17280965):
Mock.Of<DbContext, IInfrastructure<IServiceProvider>>()had no way to configure the secondary interface, and casting the object to it executed the real getter.What users get
Mock<T1>— setup, verify, raise,VerifyInOrder, unifiedInvocations, strict mode andResetall work through the existing single engine.mock.IBar_Tag); signature-identical members dedupe onto the primary surface and intercept calls through every cast.InvalidOperationExceptionwith the correctMock.Of<...>hint, instead of a silently-never-matching setup.Mock.Of<Class, IExtra>()threw) and the impl never implemented the secondary interface. Explicit/non-virtual class implementations are intercepted via explicit re-implementation. Ctor args supported:Mock.Of<T1, T2>(params object[])up to T4.Design notes
The same
(T1, Tn)pair can appear in multiple combos (Mock.Of<T1,T2>()andMock.Of<T1,T2,T3>()), where the member gets different union member IDs. The extension surface is therefore generated once per pair (deduped pipeline model) with local ordinals, and each combo factory registers atypeof(Tn) + localId -> unionIdmap on the engine (MockEngine.RegisterSecondaryInterface/TryGetSecondaryMemberId— new uniquely-named methods, no overload changes). This keeps one engine (no split Invocations/Reset semantics) while making the shared surface correct for every combo layout.The single- and multi-type member walks were unified into one collector, making the primary-members-get-identical-IDs invariant structural instead of two hand-synced copies (which had already diverged for class primaries).
Testing
MultipleInterfaceSecondarySetupTests): secondary setup/verify/reset/strict, cross-combo pair reuse, dedup, collision prefixing, wrong-mock guard, class primary with explicit impl / non-virtual blocker / ctor args, generic secondary interface.Docs: multi-interface section in
docs/writing-tests/mocking/setup.mdupdated.