Skip to content

feat: replace MSTest/xunit/coverlet with TUnit, dotnet-coverage, and CI coverage reporting - #134

Merged
wforney merged 5 commits into
mainfrom
copilot/update-to-tunit-dotnet-coverage
Aug 13, 2026
Merged

feat: replace MSTest/xunit/coverlet with TUnit, dotnet-coverage, and CI coverage reporting#134
wforney merged 5 commits into
mainfrom
copilot/update-to-tunit-dotnet-coverage

Conversation

Copilot AI commented Aug 13, 2026

Copy link
Copy Markdown
Contributor

Replaces the legacy test stack (MSTest + xunit + coverlet) with TUnit 1.64.13 on the Microsoft Testing Platform (MTP), adds dotnet-coverage for collection, and wires reportgenerator into CI to produce workflow step summaries and sticky PR coverage comments.

Package changes

  • Removed: MSTest.TestAdapter, MSTest.TestFramework, Microsoft.NET.Test.Sdk, xunit, xunit.runner.visualstudio, coverlet.collector, GitHubActionsTestLogger
  • Added: TUnit 1.64.13 to both test projects
  • Added .config/dotnet-tools.json: dotnet-coverage, dotnet-reportgenerator-globaltool

Test conversion (~30 files)

All tests migrated to TUnit idioms:

// Before (MSTest)
[TestClass]
public class FooTests
{
    [TestMethod]
    [DataRow(5, 1, 10)]
    public void IsBetween_ReturnsTrue(int value, int min, int max) =>
        Assert.IsTrue(value.IsBetween(min, max));
}

// After (TUnit)
public class FooTests
{
    [Test]
    [Arguments(5, 1, 10)]
    public async Task IsBetween_ReturnsTrue(int value, int min, int max) =>
        await Assert.That(value.IsBetween(min, max)).IsTrue();
}

[TestInitialize]/[TestCleanup][Before(Test)]/[After(Test)]; [Ignore][Skip("reason")]; xunit [Fact] and AwesomeAssertions .Should() calls also converted.

New test coverage

Added SpecificationTests, TaskExtensionsTests, ErrorResultTests, and ArrayExtensionsTests for previously uncovered areas.

CI workflow

  • dotnet tool restore + dotnet-coverage collect -- dotnet test
  • reportgenerator outputs HTML + MarkdownSummaryGithub
  • Markdown summary appended to $GITHUB_STEP_SUMMARY
  • Sticky PR comment via marocchino/sticky-pull-request-comment@v2
  • Added pull-requests: write permission to the job

…and new tests

- Replace MSTest + xunit + coverlet with TUnit 1.64.13 (Microsoft Testing Platform native)
- Convert all 30+ test files from MSTest/xunit to TUnit ([Test], [Arguments], [Before(Test)], await Assert.That)
- Add dotnet tool manifest for dotnet-coverage and reportgenerator
- Update CI workflow: dotnet-coverage collect, ReportGenerator HTML+MarkdownSummaryGithub, workflow step summary, sticky PR coverage comment
- Add new test coverage: SpecificationTests, TaskExtensionsTests, ErrorResultTests, ArrayExtensionsTests

Co-authored-by: wforney <79032+wforney@users.noreply.github.com>
Copilot AI changed the title feat: migrate to TUnit, dotnet-coverage, MTP, and modern test tooling feat: replace MSTest/xunit/coverlet with TUnit, dotnet-coverage, and CI coverage reporting Aug 13, 2026
Copilot AI requested a review from wforney August 13, 2026 02:38
@wforney
wforney marked this pull request as ready for review August 13, 2026 02:39
Copilot AI lite review requested due to automatic review settings August 13, 2026 02:39

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

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 migrates the SharedCode solution’s testing and coverage tooling from the legacy MSTest/xUnit/coverlet stack to TUnit (Microsoft Testing Platform), and updates CI to collect and publish coverage summaries and PR comments.

Changes:

  • Converted the existing unit tests to TUnit attributes/assertions and introduced a few new test files for additional coverage.
  • Updated test projects to run as executables (MTP/TUnit) and centralized TUnit package versioning.
  • Reworked CI to run the test executables under dotnet-coverage and publish ReportGenerator HTML + Markdown summaries (step summary + sticky PR comment).

Reviewed changes

Copilot reviewed 44 out of 44 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
SharedCode.Data.Tests/QueryResultTests.cs Migrates QueryResult tests from MSTest to TUnit assertions.
SharedCode.Data.Tests/PagingDescriptorTests.cs Migrates PagingDescriptor tests from MSTest to TUnit assertions.
SharedCode.Data.Tests/PageBoundryTests.cs Migrates PageBoundry tests from MSTest to TUnit assertions.
SharedCode.Data.Tests/Data.Tests.csproj Switches test project to TUnit/MTP executable model and updates references.
SharedCode.Core.Tests/ValueObjectTests.cs Migrates ValueObject tests from MSTest to TUnit assertions.
SharedCode.Core.Tests/TypeExtensionsTests.cs Migrates TypeExtensions tests from MSTest to TUnit assertions.
SharedCode.Core.Tests/Threading/TaskExtensionsTests.cs Adds new TUnit tests for TaskExtensions.SafeFireAndForgetAsync.
SharedCode.Core.Tests/Text/StringExtensionsTests.cs Migrates StringExtensions tests from MSTest to TUnit assertions.
SharedCode.Core.Tests/Text/StringBuilderExtensionsTests.cs Migrates StringBuilderExtensions tests from MSTest to TUnit assertions.
SharedCode.Core.Tests/Specifications/SpecificationTests.cs Adds new TUnit tests for specification evaluation/configuration behavior.
SharedCode.Core.Tests/Security/HasherTests.cs Migrates Hasher tests from MSTest to TUnit assertions.
SharedCode.Core.Tests/PropertySupportTests.cs Migrates PropertySupport tests from MSTest to TUnit assertions.
SharedCode.Core.Tests/NumberExtensionsTests.cs Migrates NumberExtensions tests from MSTest to TUnit assertions.
SharedCode.Core.Tests/Models/EntityTests.cs Migrates Entity tests from MSTest to TUnit assertions.
SharedCode.Core.Tests/Linq/PredicatesTests.cs Migrates from xUnit/AwesomeAssertions to TUnit assertions.
SharedCode.Core.Tests/Linq/EnumerableExtensionsTests.cs Migrates EnumerableExtensions tests from MSTest to TUnit assertions.
SharedCode.Core.Tests/Linq/CollectionExtensionsTests.cs Migrates CollectionExtensions tests from MSTest to TUnit assertions.
SharedCode.Core.Tests/LambdaComparer.cs Removes MSTest suppression attribute; keeps comparer helper.
SharedCode.Core.Tests/IntExtensionsTests.cs Migrates IntExtensions tests from MSTest to TUnit assertions/arguments.
SharedCode.Core.Tests/FunctionExtensionsTests.cs Migrates FunctionExtensions tests from MSTest to TUnit assertions.
SharedCode.Core.Tests/FluentTimeSpanTests.cs Migrates FluentTimeSpan tests from MSTest to TUnit assertions.
SharedCode.Core.Tests/ExtensionsTests.cs Migrates Extensions tests from MSTest to TUnit assertions/arguments.
SharedCode.Core.Tests/ExceptionExtensionsTests.cs Migrates ExceptionExtensions tests from MSTest to TUnit assertions.
SharedCode.Core.Tests/EventHandlerExtensionsTests.cs Migrates EventHandlerExtensions tests from MSTest to TUnit assertions.
SharedCode.Core.Tests/EnumTTests.cs Migrates Enum tests from MSTest to TUnit assertions.
SharedCode.Core.Tests/EnumExtensionsTests.cs Migrates EnumExtensions tests from MSTest to TUnit assertions.
SharedCode.Core.Tests/Domain/ResultTests.cs Migrates Result domain tests from MSTest to TUnit assertions.
SharedCode.Core.Tests/Domain/ErrorResultTests.cs Adds additional TUnit coverage for ErrorResult variants.
SharedCode.Core.Tests/Core.Tests.csproj Switches Core test project to TUnit/MTP executable model and updates references.
SharedCode.Core.Tests/CompareFunc.cs Removes MSTest suppression attribute; keeps delegate helper.
SharedCode.Core.Tests/Collections/EnumerationUtilitiesTests.cs Migrates EnumerationUtilities tests from MSTest to TUnit assertions.
SharedCode.Core.Tests/Collections/ArrayExtensionsTests.cs Adds new TUnit tests for ArrayExtensions conversion/list helpers.
SharedCode.Core.Tests/Calendar/DayOfWeekExtensionsTests.cs Migrates calendar tests from MSTest to TUnit assertions/arguments.
SharedCode.Core.Tests/Calendar/DateTimeOffsetCalendarExtensionsTests.cs Migrates calendar tests from MSTest to TUnit assertions.
SharedCode.Core.Tests/Calendar/DateTimeExtensionsTests.cs Migrates calendar tests and updates culture handling for TUnit execution.
SharedCode.Core.Tests/BaseExceptionTests.cs Migrates BaseException tests from MSTest to TUnit assertions.
SharedCode.Core.Tests/Attributes/AttributeTests.cs Migrates attribute tests from MSTest to TUnit assertions.
SharedCode.Core.Tests/AssertExtensions.cs Replaces MSTest-based helper assertions with TUnit-based helpers.
SharedCode.Core.Tests/AssemblyExtensionsTests.cs Migrates AssemblyExtensions tests from MSTest to TUnit assertions.
Directory.Packages.props Removes legacy test packages and adds TUnit version; updates select framework package versions.
.github/workflows/dotnet.yml Updates CI to build, run TUnit executables under dotnet-coverage, and publish coverage summaries/comments.
.github/scripts/run-tunit-tests.sh Adds bash runner for TUnit test executables.
.github/scripts/run-tunit-tests.ps1 Adds PowerShell runner for TUnit test executables (used by CI).
.config/dotnet-tools.json Adds local tools for dotnet-coverage and reportgenerator.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread SharedCode.Data.Tests/Data.Tests.csproj
Comment thread SharedCode.Core.Tests/Core.Tests.csproj
Comment thread SharedCode.Core.Tests/EventHandlerExtensionsTests.cs
Comment thread SharedCode.Core.Tests/ExceptionExtensionsTests.cs
…-throw tests, add code-review skill

Co-authored-by: wforney <79032+wforney@users.noreply.github.com>
Copilot AI review requested due to automatic review settings August 13, 2026 02:48
Copilot AI requested a review from wforney August 13, 2026 02:49

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

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 45 out of 45 changed files in this pull request and generated no new comments.

Suppressed comments (6)

.github/workflows/dotnet.yml:47

  • Same as above: reportgenerator is restored as a local tool from .config/dotnet-tools.json, so invoking it via dotnet tool run reportgenerator avoids relying on PATH/shims.
    - name: Generate coverage report
      if: always()
      run: >
        reportgenerator
        -reports:coverage.xml

SharedCode.Core.Tests/Core.Tests.csproj:13

  • WarningsNotAsErrors for AD0001 has the same effect of hiding analyzer crashes. If there’s no documented/temporary analyzer failure being worked around, it’s better to remove this so CI fails loudly when analyzers crash.
        <TargetFrameworks>net9.0;net10.0</TargetFrameworks>
        <WarningsNotAsErrors>$(WarningsNotAsErrors);AD0001</WarningsNotAsErrors>

.github/workflows/dotnet.yml:6

  • Workflow-wide pull-requests: write permission is broader than necessary; only the job that posts the sticky PR comment needs it. Consider keeping the workflow default as contents: read and moving pull-requests: write under the test job permissions to follow least-privilege.
permissions:
  contents: read
  pull-requests: write

.github/workflows/dotnet.yml:42

  • dotnet tool restore restores local tools from .config/dotnet-tools.json, but the reliable way to invoke them in CI is dotnet tool run <command> rather than calling dotnet-coverage directly (which depends on PATH/shims).

This issue also appears on line 43 of the same file.

    - name: Run tests with coverage
      shell: pwsh
      run: >
        dotnet-coverage collect
        --output coverage.xml

SharedCode.Core.Tests/Core.Tests.csproj:9

  • Suppressing AD0001 (AnalyzerFailure) via NoWarn can mask analyzer crashes that should be investigated (especially since analyzers are treated as errors). If this suppression isn’t strictly required for a known issue, remove it so analyzer failures surface normally.

This issue also appears on line 12 of the same file.

        <NoWarn>$(NoWarn);AD0001</NoWarn>
        <OutputType>Exe</OutputType>

SharedCode.Data.Tests/Data.Tests.csproj:13

  • Suppressing AD0001 (AnalyzerFailure) via NoWarn/WarningsNotAsErrors can mask analyzer crashes that should be investigated. If this isn’t required for a known, tracked issue, remove these properties so analyzer failures surface normally.

…enerator

Co-authored-by: wforney <79032+wforney@users.noreply.github.com>
Copilot AI review requested due to automatic review settings August 13, 2026 02:57

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

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 45 out of 45 changed files in this pull request and generated 2 comments.

Suppressed comments (1)

SharedCode.Core.Tests/Core.Tests.csproj:28

  • AwesomeAssertions, AwesomeAssertions.Analyzers, and AwesomeAssertions.Json are still referenced here, but there are no remaining AwesomeAssertions usages in SharedCode.Core.Tests after the TUnit migration. Removing these unused PackageReferences will reduce restore time and dependency surface.
    <ItemGroup>
        <PackageReference Include="AwesomeAssertions" />
        <PackageReference Include="AwesomeAssertions.Analyzers">
            <PrivateAssets>all</PrivateAssets>
            <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>

Comment thread .github/workflows/dotnet.yml Outdated
Comment thread .github/scripts/run-tunit-tests.ps1 Outdated
… runner

Co-authored-by: wforney <79032+wforney@users.noreply.github.com>
Copilot AI review requested due to automatic review settings August 13, 2026 03:06
Co-authored-by: wforney <79032+wforney@users.noreply.github.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

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 45 out of 45 changed files in this pull request and generated no new comments.

Suppressed comments (4)

SharedCode.Data.Tests/Data.Tests.csproj:13

  • AD0001 is being both suppressed (NoWarn) and downgraded (WarningsNotAsErrors), which is redundant and completely hides analyzer crashes. Consider keeping it visible but non-fatal by removing NoWarn and documenting why AD0001 is being downgraded.
    SharedCode.Core.Tests/Threading/TaskExtensionsTests.cs:26
  • This test uses a fixed delay (Task.Delay(50)) to assert a callback wasn’t invoked. SafeFireAndForgetAsync awaits Task.CompletedTask synchronously and cannot invoke the exception callback, so the delay only slows the suite and introduces a time-based dependency.
    SharedCode.Core.Tests/Core.Tests.csproj:13
  • AD0001 is being both suppressed (NoWarn) and downgraded (WarningsNotAsErrors), which is redundant and completely hides analyzer crashes. Consider keeping it visible but non-fatal by removing NoWarn and documenting why AD0001 is being downgraded.
        <NoWarn>$(NoWarn);AD0001</NoWarn>

.github/workflows/dotnet.yml:57

  • Posting a sticky PR comment will fail on forked pull requests because GITHUB_TOKEN is read-only in that context. Guard this step so CI doesn’t fail on forks.
    - name: Post coverage comment on PR
      if: always() && github.event_name == 'pull_request'
      uses: marocchino/sticky-pull-request-comment@v2

Copilot AI review requested due to automatic review settings August 13, 2026 03:10

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

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 45 out of 45 changed files in this pull request and generated no new comments.

Suppressed comments (5)

SharedCode.Data.Tests/QueryResultTests.cs:19

  • This file still uses tab indentation (e.g., on the test attributes/methods). The repo conventions specify 4-space indentation with no tabs; please convert the indentation in this file to spaces to keep formatting consistent and avoid churn in future diffs.
    SharedCode.Data.Tests/PagingDescriptorTests.cs:18
  • This file uses tab indentation for the new TUnit tests. SharedCode formatting guidelines require 4-space indentation and no tabs; please convert tabs to spaces throughout the file.
    .github/workflows/dotnet.yml:41
  • The PR description says CI runs dotnet-coverage collect -- dotnet test, but the workflow now runs a custom PowerShell runner script that executes the built test assemblies directly. Please either update the PR description to match, or switch the workflow to use dotnet test if that’s still the intended approach (to preserve standard test execution semantics like filtering/logging).
    - name: Run tests with coverage
      shell: pwsh
      run: >
        dotnet tool run dotnet-coverage collect
        --output coverage.xml
        --output-format cobertura
        --
        pwsh -NoLogo -NoProfile -File ./.github/scripts/run-tunit-tests.ps1

SharedCode.Data.Tests/PageBoundryTests.cs:16

  • This test file is indented with tabs. To match the solution formatting rules (4 spaces, no tabs), please convert indentation to spaces.
    SharedCode.Core.Tests/Core.Tests.csproj:28
  • After the migration, AwesomeAssertions and Newtonsoft.Json appear to be unused in SharedCode.Core.Tests (no code references remain). Keeping them increases restore/build time and dependency surface; consider removing these package references if they’re no longer needed.
    <ItemGroup>
        <PackageReference Include="AwesomeAssertions" />
        <PackageReference Include="AwesomeAssertions.Analyzers">
            <PrivateAssets>all</PrivateAssets>
            <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
        </PackageReference>
        <PackageReference Include="AwesomeAssertions.Json" />
        <PackageReference Include="GCop.All.Common">
            <PrivateAssets>all</PrivateAssets>
            <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
        </PackageReference>
        <PackageReference Include="Newtonsoft.Json" />
        <PackageReference Include="TUnit" />

@github-actions

Copy link
Copy Markdown

Summary

Summary
Generated on: 8/13/2026 - 3:16:21 AM
Parser: Cobertura
Assemblies: 4
Classes: 195
Files: 158
Line coverage: 42.4% (3213 of 7567)
Covered lines: 3213
Uncovered lines: 4354
Coverable lines: 7567
Total lines: 19611
Branch coverage: 25.1% (1087 of 4324)
Covered branches: 1087
Total branches: 4324
Method coverage: Feature is only available for sponsors

Coverage

SharedCode.Core - 27.3%
Name Line Branch
SharedCode.Core 27.3% 24.8%
SharedCode.AssemblyExtensions 100% 100%
SharedCode.Attributes.DataFormatAttribute 100% 100%
SharedCode.Attributes.DataWidthAttribute 100% 100%
SharedCode.Attributes.StringValueAttribute 100% 100%
SharedCode.BaseException 100% 50%
SharedCode.Calendar.DateTimeExtensions 10.8% 0.7%
SharedCode.Calendar.DateTimeOffsetExtensions 70.3% 44.2%
SharedCode.Calendar.DayOfWeekExtensions 90.9% 87.5%
SharedCode.Collections.ArrayExtensions 92% 73.3%
SharedCode.Collections.Generic.EnumerableExtensions 0% 0%
SharedCode.Collections.Generic.EnumerableExtensions 0% 0%
SharedCode.Collections.Generic.EnumerationUtilities 100%
SharedCode.Collections.ListExtensions 14.2% 12.5%
SharedCode.Collections.ObservableCollectionExtensions 0% 0%
SharedCode.Data.DataReaderExtensions 0% 0%
SharedCode.Data.DataRowExtensions 0% 0%
SharedCode.Data.DataTableExtensions 0% 0%
SharedCode.DateTimeExtensions 0% 0%
SharedCode.DateTimeOffsetExtensions 0% 0%
SharedCode.Domain.Error 88.8%
SharedCode.Domain.ErrorResult 90.9% 100%
SharedCode.Domain.ErrorResult 72.7% 50%
SharedCode.Domain.HttpErrorResult 50%
SharedCode.Domain.Result 100%
SharedCode.Domain.Result 88.8%
SharedCode.Domain.ValidationError 75%
SharedCode.Domain.ValidationErrorResult 80%
SharedCode.Enum 93.2% 83.9%
SharedCode.Enum 50%
SharedCode.EnumExtensions 100%
SharedCode.EventArgs 100%
SharedCode.EventHandlerExtensions 75% 75%
SharedCode.Events.DomainEvent 0%
SharedCode.ExceptionExtensions 51% 32.7%
SharedCode.Extensions 23.6% 14.4%
SharedCode.Extensions 23.6% 14.4%
SharedCode.FluentTimeSpan 66.2% 71.4%
SharedCode.FunctionExtensions 100% 83.3%
SharedCode.FunctionExtensions<T, TResult> 100% 83.3%
SharedCode.IntExtensions 100% 100%
SharedCode.IO.BufferedWriter 0% 0%
SharedCode.IO.DirectoryInfoExtensions 0% 0%
SharedCode.IO.FileInfoExtensions 0% 0%
SharedCode.IO.StreamExtensions 0% 0%
SharedCode.IO.TcpClientExtensions 0% 0%
SharedCode.Linq.CollectionExtensions 59.3% 52.3%
SharedCode.Linq.CollectionExtensions.SyncChanges 0%
SharedCode.Linq.CollectionExtensions<T, TKey> 59.3% 52.3%
SharedCode.Linq.CollectionExtensions 59.3% 52.3%
SharedCode.Linq.EnumerableExtensions 32.7% 26.1%
SharedCode.Linq.EnumerableExtensions<T, TKey> 32.7% 26.1%
SharedCode.Linq.EnumerableExtensions<T, TResult> 32.7% 26.1%
SharedCode.Linq.EnumerableExtensions 32.7% 26.1%
SharedCode.Linq.EnumerableExtensions<TKey, TValue> 32.7% 26.1%
SharedCode.Linq.EnumeratorExtensions 0% 0%
SharedCode.Linq.ExpressionExtensions 0% 0%
SharedCode.Linq.PredicateBuilder 0% 0%
SharedCode.Linq.Predicates 100% 100%
SharedCode.Linq.QueryableExtensions 0%
SharedCode.Linq.QueryableExtensions 0%
SharedCode.Models.Entity 100%
SharedCode.Models.Entity 75% 75%
SharedCode.Notifications.Notification 0% 0%
SharedCode.Notifications.NotificationService 0% 0%
SharedCode.Notifications.ObservableExtensions 0% 0%
SharedCode.Notifications.ObservableExtensions 0% 0%
SharedCode.Notifications.ProducerConsumer 0% 0%
SharedCode.NumberExtensions 100%
SharedCode.Problems.Problem 0% 0%
SharedCode.Problems.ProblemConstants.Types 0%
SharedCode.Problems.ProblemCreationExtensions 0%
SharedCode.Problems.ProblemException 0% 0%
SharedCode.Problems.ProblemJsonConverter 0% 0%
SharedCode.PropertySupport 83.3% 60%
SharedCode.Reflection.DeepCloneCache 0% 0%
SharedCode.Reflection.DeepCloneCache 0% 0%
SharedCode.Reflection.DeepCloneExpressionGenerator 0% 0%
SharedCode.Reflection.DeepCloneGenerator 0% 0%
SharedCode.Reflection.DeepCloneGenerator 0% 0%
SharedCode.Reflection.DeepCloneMsilHelper 0% 0%
SharedCode.Reflection.DeepCloneSafeTypes 0% 0%
SharedCode.Reflection.DeepCloneState 0% 0%
SharedCode.Reflection.DeepCloneState.MiniDictionary 0% 0%
SharedCode.Reflection.ExpressionGenerator 0% 0%
SharedCode.Reflection.GenericExtensions 0% 0%
SharedCode.Reflection.ShallowCloneGenerator 0% 0%
SharedCode.Reflection.ShallowCloneHelper 0% 0%
SharedCode.Reflection.ShallowCloneHelper.ShallowSafeObjectCloneHelper 0%
SharedCode.Security.Hasher 38.6% 44.4%
SharedCode.Specifications.Builders.CacheSpecificationBuilder 50%
SharedCode.Specifications.Builders.IncludableBuilderExtensions 0% 0%
SharedCode.Specifications.Builders.IncludableSpecificationBuilder<T, TPrope
rty>
50%
SharedCode.Specifications.Builders.OrderedBuilderExtensions 50% 25%
SharedCode.Specifications.Builders.OrderedSpecificationBuilder 100%
SharedCode.Specifications.Builders.SpecificationBuilder<T, TResult> 100%
SharedCode.Specifications.Builders.SpecificationBuilder 100%
SharedCode.Specifications.Builders.SpecificationBuilderExtensions 100% 58.3%
SharedCode.Specifications.Evaluators.InMemorySpecificationEvaluator 96.2% 78.5%
SharedCode.Specifications.Evaluators.OrderEvaluator 45.9% 36.2%
SharedCode.Specifications.Evaluators.OrderEvaluator 45.9% 36.2%
SharedCode.Specifications.Evaluators.PaginationEvaluator 50% 37.5%
SharedCode.Specifications.Evaluators.WhereEvaluator 66.6% 37.5%
SharedCode.Specifications.Exceptions.DuplicateOrderChainException 0%
SharedCode.Specifications.Exceptions.DuplicateSkipException 25%
SharedCode.Specifications.Exceptions.DuplicateTakeException 25%
SharedCode.Specifications.Exceptions.SelectorNotFoundException 25%
SharedCode.Specifications.IncludeExpressionInformation 69.2% 40%
SharedCode.Specifications.Specification<T, TResult> 100%
SharedCode.Specifications.Specification 100%
SharedCode.Text.StringBuilderExtensions 100% 100%
SharedCode.Text.StringExtensions 28.3% 28.9%
SharedCode.Text.StringExtensions 28.3% 28.9%
SharedCode.Threading.Tasks.TaskExtensions 92.8%
SharedCode.Threading.Tasks.TaskExtensions 92.8%
SharedCode.Threading.Tasks.ValueTaskExtensions 0%
SharedCode.Threading.Tasks.ValueTaskExtensions<TException, TResult> 0%
SharedCode.Threading.Tasks.ValueTaskExtensions 0%
SharedCode.Threading.Tasks.ValueTaskExtensions 0%
SharedCode.TypeExtensions 33.3% 36%
SharedCode.TypeExtensions 33.3% 36%
SharedCode.Utilities 0% 0%
SharedCode.ValueObject 80% 90.9%
SharedCode.Workflow.Rule 0%
SharedCode.Workflow.Rule 0%
SharedCode.Workflow.RuleSet 0%
SharedCode.Workflow.RuleSet 0%
SharedCode.Xml.XDocumentExtensions 0% 0%
System.Text.RegularExpressions.Generated 0% 0%
System.Text.RegularExpressions.Generated.RunnerFactory
System.Text.RegularExpressions.Generated.RunnerFactory.Runner
SharedCode.Core.Tests - 98.1%
Name Line Branch
SharedCode.Core.Tests 98.1% 77.4%
SharedCode.Tests.AssemblyExtensionsTests 100%
SharedCode.Tests.AssertExtensions 0% 0%
SharedCode.Tests.Attributes.AttributeTests 100% 100%
SharedCode.Tests.BaseExceptionTests 100%
SharedCode.Tests.Calendar.DateTimeExtensionsTests 96.3% 100%
SharedCode.Tests.Calendar.DateTimeOffsetCalendarExtensionsTests 100%
SharedCode.Tests.Calendar.DayOfWeekExtensionsTests 100%
SharedCode.Tests.Collections.ArrayExtensionsTests 100% 100%
SharedCode.Tests.Collections.EnumerationUtilitiesTests 100%
SharedCode.Tests.Domain.ErrorResultTests 100%
SharedCode.Tests.Domain.ResultTests 100%
SharedCode.Tests.EnumExtensionsTests 100%
SharedCode.Tests.EnumTTests 96.2% 90%
SharedCode.Tests.EventHandlerExtensionsTests 100%
SharedCode.Tests.ExceptionExtensionsTests 100%
SharedCode.Tests.ExtensionsTests 100% 100%
SharedCode.Tests.ExtensionsTests.SampleRecord 100%
SharedCode.Tests.FluentTimeSpanTests 100%
SharedCode.Tests.FunctionExtensionsTests 100%
SharedCode.Tests.IntExtensionsTests 100%
SharedCode.Tests.LambdaComparer 0% 0%
SharedCode.Tests.Linq.CollectionExtensionsTests 100% 100%
SharedCode.Tests.Linq.EnumerableExtensionsTests 100% 100%
SharedCode.Tests.Linq.PredicatesTests 100%
SharedCode.Tests.Models.EntityTests 100%
SharedCode.Tests.NumberExtensionsTests 100%
SharedCode.Tests.PropertySupportTests 100% 100%
SharedCode.Tests.PropertySupportTests.SampleClass 100%
SharedCode.Tests.Security.HasherTests 100%
SharedCode.Tests.Specifications.SpecificationTests 97.7% 100%
SharedCode.Tests.Specifications.SpecificationTests.BuilderExposingSpecifica
tion
100%
SharedCode.Tests.Specifications.SpecificationTests.DuplicateSkipSpecificati
on
66.6%
SharedCode.Tests.Specifications.SpecificationTests.DuplicateTakeSpecificati
on
66.6%
SharedCode.Tests.Specifications.SpecificationTests.SampleEntity 100%
SharedCode.Tests.Specifications.SpecificationTests.SampleEntitySpecificatio
n
100% 100%
SharedCode.Tests.Specifications.SpecificationTests.SampleProjectionSpecific
ation
100% 100%
SharedCode.Tests.Specifications.SpecificationTests.SearchOnlySpecification 100%
SharedCode.Tests.Text.StringBuilderExtensionsTests 100%
SharedCode.Tests.Text.StringExtensionsTests 100% 100%
SharedCode.Tests.Threading.TaskExtensionsTests 100%
SharedCode.Tests.TypeExtensionsTests 100%
SharedCode.Tests.ValueObjectTests 96.8%
SharedCode.Tests.ValueObjectTests.Address 66.6%
SharedCode.Tests.ValueObjectTests.MoneyValue 100%
TUnit.Generated.Hooks.SharedCode_Tests_Calendar_DateTimeExtensionsTests_Ini
tTestCase_Before_Test.SharedCode_Tests_Calendar_DateTimeExtensionsTests_Ini
tTestCase_Before_TestInitializer
100%
TUnit.Generated.Hooks.SharedCode_Tests_Calendar_DateTimeExtensionsTests_Tea
rdownTestCase_After_Test.SharedCode_Tests_Calendar_DateTimeExtensionsTests_
TeardownTestCase_After_TestInitializer
100%
SharedCode.Data - 8.3%
Name Line Branch
SharedCode.Data 8.3% 0%
SharedCode.Data.AddOrUpdateDescriptor 0%
SharedCode.Data.CommandRepository 0% 0%
SharedCode.Data.DataReaderExtensions 0% 0%
SharedCode.Data.DataReaderExtensions 0% 0%
SharedCode.Data.DataRecordConverter 0% 0%
SharedCode.Data.DataServiceQueryExtensions 0% 0%
SharedCode.Data.DataServiceQueryExtensions 0% 0%
SharedCode.Data.DataServiceQueryExtensions 0% 0%
SharedCode.Data.DynamicDataRecord 0% 0%
SharedCode.Data.Exceptions.ColumnIsNotInResultSetException 0%
SharedCode.Data.Extensions 0% 0%
SharedCode.Data.ListExtensions 0% 0%
SharedCode.Data.PageBoundry 100%
SharedCode.Data.PagingDescriptor 100%
SharedCode.Data.QueryRepository 0% 0%
SharedCode.Data.QueryResult 100%
SharedCode.Data.Tests - 100%
Name Line Branch
SharedCode.Data.Tests 100% ****
SharedCode.Data.Tests.PageBoundryTests 100%
SharedCode.Data.Tests.PagingDescriptorTests 100%
SharedCode.Data.Tests.QueryResultTests 100%

@wforney
wforney merged commit 38d5638 into main Aug 13, 2026
3 checks passed
@wforney
wforney deleted the copilot/update-to-tunit-dotnet-coverage branch August 13, 2026 05:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants