Skip to content

Migrate to AwesomeAssertions, release-please, and .NET 8/10#53

Merged
perkops merged 11 commits into
mainfrom
feature/updates
Jun 22, 2026
Merged

Migrate to AwesomeAssertions, release-please, and .NET 8/10#53
perkops merged 11 commits into
mainfrom
feature/updates

Conversation

@perkops

@perkops perkops commented Jun 22, 2026

Copy link
Copy Markdown
Member

Summary

  • Replace FluentAssertions with the Apache-2.0 AwesomeAssertions fork
  • Drop the v7 license-pin holding pattern; land on the maintained line
  • Move releases from Nerdbank.GitVersioning to release-please
  • Retarget to net8.0/net10.0 and trim legacy/framework packages
  • Tighten analyzers, bump deps, and add missing test coverage
  • This is a breaking change for consumers (major release)

Changes

💥 Breaking Changes

  • Swap FluentAssertions for AwesomeAssertions 9.x (namespace change)
  • Port equivalency extensibility to the AwesomeAssertions 9 API

📦 Dependencies

  • AwesomeAssertions [9.4.0,10.0) replaces FluentAssertions
  • Bump xunit v3 3.0.1 -> 3.2.2 and SourceLink 8.0.0 -> 10.0.300
  • Centralize Microsoft.NET.Test.Sdk (18.6.0) in test props
  • Add Atc.Analyzer; bump AsyncFixer/Meziantou/SonarAnalyzer
  • Drop framework-provided System.Net.Http/Text.Json/RegularExpressions

👷 CI/CD

  • Adopt release-please for versioning and NuGet publishing
  • Replace manual release/integration workflows with build.yml
  • Bump setup-dotnet to 10.0.x

🔧 Configuration

  • Target net8.0;net10.0 (drop netstandard2.1 and net9.0)
  • Set LangVersion 14.0 and AnalysisLevel latest-All
  • Remove version.json (release-please manages the version)

✨ Features

  • Add tests for SubstituteExtensions, TaskExtensions, ObjectExtensions
  • Add tests for FixtureFactory and the AutoFixture customizations

♻️ Refactoring

  • Reorganize fixtures into TestSupport/{Models,Abstractions,Customizations}
  • Drop always-true NET5_0/NET6_0 preprocessor guards
  • Consolidate usings into global usings; fix analyzer diagnostics

📝 Documentation

  • Update README target frameworks and example project
  • Document the FluentAssertions -> AwesomeAssertions migration

Breaking Changes

  • Consumers must replace using FluentAssertions; with using AwesomeAssertions; (and .Equivalency/.Primitives/.Execution).
  • Remove any direct FluentAssertions package reference; Atc.Test now brings in AwesomeAssertions transitively.
  • .Should()... assertions are unchanged (API matches FA 7.x).
  • Public extensions now use EquivalencyOptions<T> (was EquivalencyAssertionOptions<T>).

Per Kops added 6 commits June 19, 2026 12:55
FluentAssertions v8+ requires a paid commercial license, which is why the
dependency was pinned to [7.2.1,8.0). Replace it with AwesomeAssertions, the
Apache-2.0 community fork of FluentAssertions 7.x, on the actively-developed
9.x line.

AwesomeAssertions 9.x renames the namespace FluentAssertions -> AwesomeAssertions
and carries the FluentAssertions v8 equivalency rework, so the equivalency
extensibility used by EquivalencyAssertionOptionsExtensions was ported:
EquivalencyAssertionOptions<T> -> EquivalencyOptions<T>, the IEquivalencyStep.Handle
validator parameter -> IValidateChildNodeEquivalency, RecursivelyAssertEquality ->
AssertEquivalencyOf, and EquivalencyResult.AssertionCompleted -> EquivalencyProven.

Also adds the AwesomeAssertions.Analyzers (dev-only) and tests covering the
ported equivalency extensions.

BREAKING CHANGE: the assertion package and namespace changed from FluentAssertions
to AwesomeAssertions. Consumers must replace `using FluentAssertions;` with
`using AwesomeAssertions;` (and the .Equivalency/.Primitives/.Execution/.Extensions
sub-namespaces) and remove any direct FluentAssertions package reference.
- Multi-target net8.0;net10.0 (drop net9 STS and the vestigial
  netstandard2.1 fallback; net9 consumers resolve the net8.0 asset)
- Bump test project to net10.0
- Remove framework-provided System.Net.Http and System.Text.RegularExpressions
  package references (net10 package pruning flags System.Net.Http via NU1510)
davidkallesen
davidkallesen previously approved these changes Jun 22, 2026
Per Kops added 5 commits June 22, 2026 13:42
Required to build the net10.0 target in the build and release-please workflows.
…ze fixtures

- Add tests for SubstituteExtensions, TaskExtensions, ObjectExtensions,
  FixtureFactory and the AutoFixture customizations (recursion, cancellation
  token, date-only, immutable, auto-register)
- Reorganize shared fixtures from SampleTypes into
  TestSupport/{Models,Abstractions,Customizations}
- Move the new test-fixture namespaces and System.Collections.Immutable /
  NSubstitute.Exceptions into global usings
- Enable AnalysisLevel latest-All, add Atc.Analyzer, bump AsyncFixer/Meziantou/
  SonarAnalyzer, and set LangVersion 14.0
- Drop always-true NET5_0/NET6_0 preprocessor guards (floor is net8.0)
- Fix surfaced diagnostics: ATC202 parameter formatting, seal the TheoryData
  subclass (MA0056), and consolidate usings into global usings
@perkops perkops merged commit 9be128b into main Jun 22, 2026
3 checks passed
@perkops perkops deleted the feature/updates branch June 22, 2026 11:45
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.

2 participants