Skip to content

feat: support MSTest v4#814

Merged
vbreuss merged 3 commits intomainfrom
topic/support-mstest4
Oct 18, 2025
Merged

feat: support MSTest v4#814
vbreuss merged 3 commits intomainfrom
topic/support-mstest4

Conversation

@vbreuss
Copy link
Copy Markdown
Member

@vbreuss vbreuss commented Oct 18, 2025

Adds first-class support for MSTest v4 while keeping MSTest v3 compatibility.

Key changes:

  • Splits the MSTest adapter into distinct MSTest3 and MSTest4 adapters with assembly-based detection.
  • Introduces dedicated test projects/namespaces for MSTest3 and MSTest4 and updates central package versions to MSTest v4.
  • Updates solution and generator debug profile to include the new MSTest4 tests.

@vbreuss vbreuss self-assigned this Oct 18, 2025
Copilot AI review requested due to automatic review settings October 18, 2025 13:43
@vbreuss vbreuss added the enhancement New feature or request label Oct 18, 2025
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

Adds first-class support for MSTest v4 while keeping MSTest v3 compatibility.

  • Splits the MSTest adapter into distinct MSTest3 and MSTest4 adapters with assembly-based detection.
  • Introduces dedicated test projects/namespaces for MSTest3 and MSTest4 and updates central package versions to MSTest v4.
  • Updates solution and generator debug profile to include the new MSTest4 tests.

Reviewed Changes

Copilot reviewed 7 out of 8 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
aweXpect.sln Renames the MSTest test project to MSTest3, adds a new MSTest4 test project, and wires solution configs.
Tests/Frameworks/aweXpect.Frameworks.MsTest4.Tests/MsTest4FrameworkTests.cs Adds tests validating aweXpect’s fail/skip/inconclusive mapping against MSTest v4 exceptions.
Tests/Frameworks/aweXpect.Frameworks.MsTest3.Tests/aweXpect.Frameworks.MsTest3.Tests.csproj Pins MSTest packages to v3 via VersionOverride ranges to avoid pulling v4.
Tests/Frameworks/aweXpect.Frameworks.MsTest3.Tests/MsTest3FrameworkTests.cs Adjusts namespace to MsTest3 to match the new project identity.
Source/aweXpect.Frameworks/Properties/launchSettings.json Points generator debug profile to the new MSTest4 test project.
Source/aweXpect.Frameworks/FrameworkGenerator.cs Adds separate MsTest3/MsTest4 adapters and updates assembly detection to generate the right adapter(s).
Directory.Packages.props Bumps central MSTest packages to v4.0.1 to enable v4 usage by default.

Comment thread Source/aweXpect.Frameworks/Properties/launchSettings.json
Comment thread Source/aweXpect.Frameworks/FrameworkGenerator.cs Outdated
Copilot AI review requested due to automatic review settings October 18, 2025 13:48
@vbreuss vbreuss force-pushed the topic/support-mstest4 branch from 2fb91e5 to 2a0462c Compare October 18, 2025 13:50
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

Copilot reviewed 8 out of 9 changed files in this pull request and generated 1 comment.

Comment thread Source/aweXpect.Frameworks/FrameworkGenerator.cs
@vbreuss vbreuss force-pushed the topic/support-mstest4 branch from 2a0462c to a8a5c9f Compare October 18, 2025 13:50
@vbreuss vbreuss enabled auto-merge (squash) October 18, 2025 13:52
@sonarqubecloud
Copy link
Copy Markdown

@github-actions
Copy link
Copy Markdown
Contributor

Test Results

    14 files   - 24      14 suites   - 24   4m 5s ⏱️ +14s
17 959 tests  - 22  17 957 ✅  - 22  2 💤 ±0  0 ❌ ±0 
50 505 runs   - 72  50 503 ✅  - 72  2 💤 ±0  0 ❌ ±0 

Results for commit a8a5c9f. ± Comparison against base commit 8d0e2bc.

This pull request removes 1582 and adds 1560 tests. Note that renamed tests count towards both.
aweXpect.Core.Tests.Core.Exceptions.FailExceptionTests ‑ Message_ShouldBeSet(message: "message5d8f462e-2d8a-4931-9409-514459085f32")
aweXpect.Core.Tests.Core.Exceptions.FailExceptionTests ‑ Message_ShouldBeSet(message: "messagebe68c837-29c3-4983-aefd-7a5f2768f620")
aweXpect.Core.Tests.Core.Exceptions.FailExceptionTests ‑ Message_ShouldBeSet(message: "messagef64b3a38-3ead-4d94-84d8-461a85f80a0e")
aweXpect.Core.Tests.Core.Exceptions.SkipExceptionTests ‑ Message_ShouldBeSet(message: "message355e3d29-159b-4e2d-8b4d-3e72184a1163")
aweXpect.Core.Tests.Core.Exceptions.SkipExceptionTests ‑ Message_ShouldBeSet(message: "message387b9cf5-22ea-471b-a216-f334d47b7198")
aweXpect.Core.Tests.Core.Exceptions.SkipExceptionTests ‑ Message_ShouldBeSet(message: "message94275740-ad5d-433c-ac10-71d3b27858eb")
aweXpect.Core.Tests.FailTests ‑ Test_ShouldThrowException(reason: "reason1366c8fe-0607-4f11-b1cc-32c8f11508ea")
aweXpect.Core.Tests.FailTests ‑ Test_ShouldThrowException(reason: "reason43165fd5-6fb9-4a2d-9d09-5ad6b0710d66")
aweXpect.Core.Tests.FailTests ‑ Test_ShouldThrowException(reason: "reasonc6ec5819-2b2d-4a22-b36b-4e9d34c052c6")
aweXpect.Core.Tests.FailTests ‑ Unless_ShouldThrowException(condition: False, reason: "reason19ae554e-2421-4f00-a676-2c36147370a7")
…
aweXpect.Core.Tests.Core.Exceptions.FailExceptionTests ‑ Message_ShouldBeSet(message: "message16c21091-641d-4efa-bdb4-e270bea42fef")
aweXpect.Core.Tests.Core.Exceptions.FailExceptionTests ‑ Message_ShouldBeSet(message: "messageb0d45a6a-6011-4f3c-9612-f4d1a0818f80")
aweXpect.Core.Tests.Core.Exceptions.FailExceptionTests ‑ Message_ShouldBeSet(message: "messagef0dfd44c-51f1-4343-9d86-f9bb47a2651a")
aweXpect.Core.Tests.Core.Exceptions.SkipExceptionTests ‑ Message_ShouldBeSet(message: "message2a5b5b1d-f8f3-49a0-bc3f-0bf88668dfb3")
aweXpect.Core.Tests.Core.Exceptions.SkipExceptionTests ‑ Message_ShouldBeSet(message: "message72788638-e560-4660-b37f-79dddbc307f3")
aweXpect.Core.Tests.Core.Exceptions.SkipExceptionTests ‑ Message_ShouldBeSet(message: "messagea128ce68-5a1a-4781-8d92-597f70890cca")
aweXpect.Core.Tests.FailTests ‑ Test_ShouldThrowException(reason: "reason2e5f510f-c45e-433c-a876-a9f70c4166d6")
aweXpect.Core.Tests.FailTests ‑ Test_ShouldThrowException(reason: "reasone3e0c24a-9f14-45a7-8c4b-cd302e402bd2")
aweXpect.Core.Tests.FailTests ‑ Test_ShouldThrowException(reason: "reasonf48f505d-640f-4563-b0b8-56d1581235ba")
aweXpect.Core.Tests.FailTests ‑ Unless_ShouldThrowException(condition: False, reason: "reason2f9bd2d8-bb3b-4897-a3a8-6aa6f9def552")
…

@vbreuss vbreuss merged commit f62cf1d into main Oct 18, 2025
14 checks passed
@vbreuss vbreuss deleted the topic/support-mstest4 branch October 18, 2025 14:01
@github-actions
Copy link
Copy Markdown
Contributor

🚀 Benchmark Results

Details

BenchmarkDotNet v0.14.0, Ubuntu 24.04.3 LTS (Noble Numbat)
AMD EPYC 7763, 1 CPU, 4 logical and 2 physical cores
.NET SDK 8.0.415
[Host] : .NET 8.0.21 (8.0.2125.47513), X64 RyuJIT AVX2

Job=InProcess Toolchain=InProcessEmitToolchain IterationCount=15
LaunchCount=1 WarmupCount=10

Method Mean Error StdDev Gen0 Gen1 Allocated
Bool_aweXpect 276.8 ns 4.67 ns 4.37 ns 0.0424 - 712 B
Bool_FluentAssertions 255.0 ns 7.49 ns 7.01 ns 0.0567 - 952 B
Bool_TUnit 213.7 ns 4.59 ns 4.30 ns 0.0396 - 664 B
Equivalency_aweXpect 320,451.3 ns 705.90 ns 660.30 ns 20.0195 0.9766 335556 B
Equivalency_FluentAssertions 2,313,414.9 ns 11,811.01 ns 10,470.15 ns 273.4375 46.8750 4584416 B
Equivalency_TUnit 308,733.6 ns 1,482.29 ns 1,386.53 ns 13.1836 0.4883 224760 B
Int_GreaterThan_aweXpect 276.3 ns 5.14 ns 4.81 ns 0.0486 - 816 B
Int_GreaterThan_FluentAssertions 271.6 ns 5.15 ns 4.82 ns 0.0730 - 1224 B
Int_GreaterThan_TUnit 241.3 ns 5.09 ns 4.76 ns 0.0486 - 816 B
ItemsCount_AtLeast_aweXpect 535.0 ns 7.14 ns 6.68 ns 0.0868 - 1464 B
ItemsCount_AtLeast_FluentAssertions 537.4 ns 11.10 ns 10.38 ns 0.1192 - 2008 B
ItemsCount_AtLeast_TUnit 16,936.5 ns 145.68 ns 136.27 ns 1.4954 - 25432 B
String_aweXpect 530.8 ns 2.07 ns 1.93 ns 0.0734 - 1232 B
String_FluentAssertions 536.0 ns 8.60 ns 8.04 ns 0.1287 - 2168 B
String_TUnit 278.9 ns 4.19 ns 3.92 ns 0.0496 - 832 B
StringArray_aweXpect 1,983.2 ns 10.74 ns 10.05 ns 0.1717 - 2888 B
StringArray_FluentAssertions 1,451.3 ns 22.23 ns 20.80 ns 0.2480 - 4152 B
StringArray_TUnit 733.4 ns 9.39 ns 8.78 ns 0.0820 - 1376 B
StringArrayInAnyOrder_aweXpect 2,557.7 ns 8.25 ns 7.72 ns 0.1831 - 3080 B
StringArrayInAnyOrder_FluentAssertions 129,305.6 ns 536.45 ns 501.80 ns 3.6621 - 61719 B
StringArrayInAnyOrder_TUnit 791.7 ns 4.64 ns 4.34 ns 0.0858 - 1440 B

@github-actions
Copy link
Copy Markdown
Contributor

👽 Mutation Results

Mutation testing badge

aweXpect

Details
File Score Killed Survived Timeout No Coverage Ignored Compile Errors Total Detected Total Undetected Total Mutants

The final mutation score is NaN%

Coverage Thresholds: high:80 low:60 break:0

aweXpect.Core

Details
File Score Killed Survived Timeout No Coverage Ignored Compile Errors Total Detected Total Undetected Total Mutants

The final mutation score is NaN%

Coverage Thresholds: high:80 low:60 break:0

github-actions Bot added a commit that referenced this pull request Oct 18, 2025
github-actions Bot added a commit that referenced this pull request Oct 18, 2025
@github-actions
Copy link
Copy Markdown
Contributor

This is addressed in release v2.27.0.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request state: released The issue is released

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants