Skip to content

fix: failure messages of EquivalencyComparer - #751

Merged
vbreuss merged 2 commits into
mainfrom
topic/fix-equivalencycomparer-failure-messages
Sep 3, 2025
Merged

fix: failure messages of EquivalencyComparer#751
vbreuss merged 2 commits into
mainfrom
topic/fix-equivalencycomparer-failure-messages

Conversation

@vbreuss

@vbreussvbreuss commented Sep 3, 2025

Copy link
Copy Markdown
Member

This PR fixes failure messages in the EquivalencyComparer by changing "equivalent to" to "equivalent for" in negated scenarios, and improves test coverage for the Exceptions HasParamName functionality.

Key Changes

  • Fixed failure message wording in EquivalencyComparer for negated equivalency checks
  • Added comprehensive test coverage for negated HasParamName scenarios
  • Enhanced HasParamName implementation to properly handle null expected values in different grammar contexts

Also improve code coverage for Exceptions `HasParamName`
@vbreussvbreuss self-assigned this Sep 3, 2025
CopilotAI review requested due to automatic review settings September 3, 2025 08:54
@vbreussvbreuss added the bug Something isn't working label Sep 3, 2025

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull Request Overview

This PR fixes failure messages in the EquivalencyComparer by changing "equivalent to" to "equivalent for" in negated scenarios, and improves test coverage for the Exceptions HasParamName functionality.

Key Changes

  • Fixed failure message wording in EquivalencyComparer for negated equivalency checks
  • Added comprehensive test coverage for negated HasParamName scenarios
  • Enhanced HasParamName implementation to properly handle null expected values in different grammar contexts

Reviewed Changes

Copilot reviewed 9 out of 9 changed files in this pull request and generated 3 comments.

Show a summary per file
FileDescription
Tests/aweXpect.Tests/ThatGeneric.DoesNotComplyWith.Tests.csUpdated expected error messages to use "equivalent for" instead of "equivalent to"
Tests/aweXpect.Tests/Objects/ThatObject.IsNotOneOf.Tests.csUpdated expected error messages to use "equivalent for" instead of "equivalent to"
Tests/aweXpect.Tests/Objects/ThatObject.IsNotEquivalentTo.Tests.csUpdated expected error messages to use "equivalent for" instead of "equivalent to"
Tests/aweXpect.Tests/Objects/ThatObject.IsEquivalentTo.Tests.csAdded new test cases for IEqualityComparer scenarios and negated equivalency tests
Tests/aweXpect.Tests/Exceptions/ThatException.HasParamName.Tests.csAdded comprehensive test coverage for negated HasParamName scenarios
Tests/aweXpect.Internal.Tests/ThatTests/Exceptions/HasParamNameValueConstraintTests.csAdded unit tests for HasParamName expectation message formatting
Source/aweXpect/That/Exceptions/ThatException.HasParamName.csEnhanced implementation to handle null expected values and different grammar contexts
Source/aweXpect/Equivalency/EquivalencyComparer.csFixed failure message wording and improved formatting for IEqualityComparer scenarios
Source/aweXpect.Core/Core/Polyfills/ReferenceEqualityComparer.csAdded ExcludeFromCodeCoverage attribute

Comment threadTests/aweXpect.Tests/Objects/ThatObject.IsEquivalentTo.Tests.cs Outdated
Comment threadSource/aweXpect/Equivalency/EquivalencyComparer.cs
Comment threadSource/aweXpect/Equivalency/EquivalencyComparer.cs
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
@vbreuss
vbreuss enabled auto-merge (squash) September 3, 2025 08:57
@github-actions

Copy link
Copy Markdown
Contributor

Test Results

14 files - 24 14 suites - 24 4m 17s ⏱️ +36s
17 310 tests + 9 17 307 ✅ + 9 3 💤 ±0 0 ❌ ±0 
48 585 runs - 3 48 580 ✅ - 3 5 💤 ±0 0 ❌ ±0 

Results for commit 5797bd6. ± Comparison against base commit ec4efe1.

This pull request removes 1557 and adds 1566 tests. Note that renamed tests count towards both.
aweXpect.Core.Tests.Core.Exceptions.FailExceptionTests ‑ Message_ShouldBeSet(message: "message1501bcca-3208-41bd-a02b-ad0cd5a07db9")
aweXpect.Core.Tests.Core.Exceptions.FailExceptionTests ‑ Message_ShouldBeSet(message: "message78363fd1-f20d-4697-9e29-2bcc2ec13a6b")
aweXpect.Core.Tests.Core.Exceptions.FailExceptionTests ‑ Message_ShouldBeSet(message: "messagea3047807-d60b-4f46-9290-3993d088e967")
aweXpect.Core.Tests.Core.Exceptions.SkipExceptionTests ‑ Message_ShouldBeSet(message: "message328199e1-5449-4b5e-a771-8bb380af78f1")
aweXpect.Core.Tests.Core.Exceptions.SkipExceptionTests ‑ Message_ShouldBeSet(message: "message5d7e734e-c0d2-4201-9788-8e77d4bb20a7")
aweXpect.Core.Tests.Core.Exceptions.SkipExceptionTests ‑ Message_ShouldBeSet(message: "messagef8e72766-5e69-478e-9f17-d0654d214f67")
aweXpect.Core.Tests.Equivalency.EquivalencyOptionsExtensionsTests ‑ Generic_For_IgnoringMember_ShouldSetOptionForType(memberToIgnore: "memberToIgnore258adbf5-0d2a-4e60-806d-58f78fe39cb3")
aweXpect.Core.Tests.Equivalency.EquivalencyOptionsExtensionsTests ‑ Generic_For_IgnoringMember_ShouldSetOptionForType(memberToIgnore: "memberToIgnore65ab76c4-77ae-4179-8f5d-7473e7804f71")
aweXpect.Core.Tests.Equivalency.EquivalencyOptionsExtensionsTests ‑ Generic_For_IgnoringMember_ShouldSetOptionForType(memberToIgnore: "memberToIgnore9cb8c1c7-8447-43c3-aba6-74ca597553cb")
aweXpect.Core.Tests.FailTests ‑ Test_ShouldThrowException(reason: "reason808d150c-5d8f-4b6c-9de4-f409a568c65e")
…
aweXpect.Core.Tests.Core.Exceptions.FailExceptionTests ‑ Message_ShouldBeSet(message: "message3be241d1-8869-48f3-ac73-e27fed37dd94")
aweXpect.Core.Tests.Core.Exceptions.FailExceptionTests ‑ Message_ShouldBeSet(message: "message9c394d6b-8d2a-40a1-a9e1-66f2cc671e20")
aweXpect.Core.Tests.Core.Exceptions.FailExceptionTests ‑ Message_ShouldBeSet(message: "messaged5563195-f718-49dd-bfe6-60e31b733ebd")
aweXpect.Core.Tests.Core.Exceptions.SkipExceptionTests ‑ Message_ShouldBeSet(message: "messagec41fb292-f19c-4ff6-90c1-df81c5969a97")
aweXpect.Core.Tests.Core.Exceptions.SkipExceptionTests ‑ Message_ShouldBeSet(message: "messagec524e92c-ae7b-411f-bedf-1e6759d5204f")
aweXpect.Core.Tests.Core.Exceptions.SkipExceptionTests ‑ Message_ShouldBeSet(message: "messagef8251c59-c5db-478e-a400-4879210aec89")
aweXpect.Core.Tests.Equivalency.EquivalencyOptionsExtensionsTests ‑ Generic_For_IgnoringMember_ShouldSetOptionForType(memberToIgnore: "memberToIgnore181a9e7a-d3e0-40e4-9648-724db3b1ac9a")
aweXpect.Core.Tests.Equivalency.EquivalencyOptionsExtensionsTests ‑ Generic_For_IgnoringMember_ShouldSetOptionForType(memberToIgnore: "memberToIgnore9d5f449f-3e97-4104-9483-b2496870b604")
aweXpect.Core.Tests.Equivalency.EquivalencyOptionsExtensionsTests ‑ Generic_For_IgnoringMember_ShouldSetOptionForType(memberToIgnore: "memberToIgnorec66c33cf-ce1b-47d4-8c5c-c4e938c09fc2")
aweXpect.Core.Tests.FailTests ‑ Test_ShouldThrowException(reason: "reason4c3b15f6-c6ba-4632-b27a-a1e6d8695f1b")
…

@sonarqubecloud

Copy link
Copy Markdown

Quality Gate FailedQuality Gate failed

Failed conditions
1 New issue

See analysis details on SonarQube Cloud

Catch issues before they fail your Quality Gate with our IDE extension SonarQube for IDE

@github-actions

github-actionsBot commented Sep 3, 2025

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.413
[Host] : .NET 8.0.19 (8.0.1925.36514), X64 RyuJIT AVX2

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

MethodMeanErrorStdDevGen0Gen1Allocated
Bool_aweXpect208.6 ns1.39 ns1.16 ns0.0300-504 B
Bool_FluentAssertions239.4 ns0.93 ns0.87 ns0.0567-952 B
Bool_TUnit857.6 ns7.23 ns6.41 ns0.1431-2408 B
Equivalency_aweXpect326,104.5 ns3,191.79 ns2,985.60 ns16.60160.4883285044 B
Equivalency_FluentAssertions2,121,569.6 ns3,937.07 ns3,287.63 ns273.437546.87504584416 B
Equivalency_TUnit687,923.7 ns2,421.66 ns2,022.20 ns51.75782.9297880545 B
Int_GreaterThan_aweXpect247.8 ns1.59 ns1.41 ns0.0486-816 B
Int_GreaterThan_FluentAssertions241.8 ns1.84 ns1.73 ns0.0730-1224 B
Int_GreaterThan_TUnit1,199.3 ns3.78 ns3.54 ns0.1774-2984 B
ItemsCount_AtLeast_aweXpect476.0 ns0.97 ns0.76 ns0.0868-1464 B
ItemsCount_AtLeast_FluentAssertions489.7 ns0.96 ns0.85 ns0.1192-2008 B
ItemsCount_AtLeast_TUnit14,996.0 ns138.53 ns129.58 ns1.6327-27480 B
String_aweXpect429.4 ns4.41 ns4.12 ns0.0734-1232 B
String_FluentAssertions479.3 ns11.37 ns10.63 ns0.1292-2168 B
String_TUnit1,308.6 ns18.26 ns17.08 ns0.1831-3072 B
StringArray_aweXpect1,944.8 ns14.89 ns13.93 ns0.1678-2856 B
StringArray_FluentAssertions1,463.2 ns5.63 ns5.27 ns0.2480-4152 B
StringArray_TUnit3,470.6 ns11.12 ns9.86 ns0.3128-5296 B
StringArrayInAnyOrder_aweXpect2,397.3 ns3.81 ns3.18 ns0.1793-3048 B
StringArrayInAnyOrder_FluentAssertions156,387.4 ns289.77 ns256.87 ns3.4180-64324 B
StringArrayInAnyOrder_TUnit4,217.6 ns13.16 ns12.31 ns0.3815-6488 B

@github-actions

Copy link
Copy Markdown
Contributor

👽 Mutation Results

Mutation testing badge

aweXpect

Details
FileScoreKilledSurvivedTimeoutNo CoverageIgnoredCompile ErrorsTotal DetectedTotal UndetectedTotal Mutants
Equivalency/EquivalencyComparer.cs89.29%5020411950676
That/Exceptions/ThatException.HasParamName.cs100.00%43000211943083

The final mutation score is 93.94%

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

aweXpect.Core

Details
FileScoreKilledSurvivedTimeoutNo CoverageIgnoredCompile ErrorsTotal DetectedTotal UndetectedTotal Mutants

The final mutation score is NaN%

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

@vbreuss
vbreuss merged commit a18e70c into mainSep 3, 2025
13 of 14 checks passed
@vbreuss
vbreuss deleted the topic/fix-equivalencycomparer-failure-messages branch September 3, 2025 09:06
github-actionsBot added a commit that referenced this pull request Sep 3, 2025
github-actionsBot added a commit that referenced this pull request Sep 3, 2025
@github-actions

Copy link
Copy Markdown
Contributor

This is addressed in release v2.23.0.

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

Labels

bugSomething isn't workingstate: releasedThe issue is released

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@vbreuss