Swevo.AutoAssert 1.1.0

Prefix Reserved
dotnet add package Swevo.AutoAssert --version 1.1.0
                    
NuGet\Install-Package Swevo.AutoAssert -Version 1.1.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Swevo.AutoAssert" Version="1.1.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Swevo.AutoAssert" Version="1.1.0" />
                    
Directory.Packages.props
<PackageReference Include="Swevo.AutoAssert" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Swevo.AutoAssert --version 1.1.0
                    
#r "nuget: Swevo.AutoAssert, 1.1.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Swevo.AutoAssert@1.1.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Swevo.AutoAssert&version=1.1.0
                    
Install as a Cake Addin
#tool nuget:?package=Swevo.AutoAssert&version=1.1.0
                    
Install as a Cake Tool

AutoAssert

NuGet NuGet Downloads CI License: MIT

Free, MIT-licensed fluent assertions for .NET. No commercial license required — ever.

Why AutoAssert?

Starting with v8, FluentAssertions requires a paid commercial license for use in commercial projects (via its Xceed partnership). AutoAssert provides the same fluent Should() syntax you already know, fully free and open source under MIT, for teams who don't want licensing fees attached to their test suite.

using AutoAssert;

result.Should().Be(42);
name.Should().NotBeNullOrEmpty();
items.Should().HaveCount(3);
action.Should().Throw<InvalidOperationException>().WithMessage("boom");

Install

dotnet add package Swevo.AutoAssert

Supported assertions

Type Examples
Objects Be, NotBe, BeNull, NotBeNull, BeSameAs, BeOfType<T>, BeAssignableTo<T>, Match, BeEquivalentTo
Strings Be, Contain, StartWith, EndWith, BeNullOrEmpty, HaveLength, MatchRegex
Booleans BeTrue, BeFalse
Numerics (int/long/short/byte/double/float/decimal) Be, BeGreaterThan, BeLessThan, BeInRange, BeApproximately
Collections HaveCount, Contain, BeEquivalentTo, Equal, ContainSingle, OnlyHaveUniqueItems, AllSatisfy
Exceptions Throw<T>, ThrowAsync<T>, NotThrow, NotThrowAsync, WithMessage, WithInnerException<T>

Every assertion accepts an optional because reasoning clause, matching the syntax you're used to:

result.Should().Be(42, "the answer should always be 42");

BeEquivalentTo

BeEquivalentTo performs deep structural comparison of public readable properties and public fields. It works for plain objects, nested object graphs, and collections of objects.

using AutoAssert;

var actual = new OrderDto
{
    Id = 42,
    Customer = new CustomerDto { Name = "Ada" },
    Lines = [new OrderLineDto { Sku = "ABC", Quantity = 2 }]
};

var expected = new
{
    Id = 42,
    Customer = new { Name = "Ada" },
    Lines = new[] { new { Sku = "ABC", Quantity = 2 } }
};

actual.Should().BeEquivalentTo(expected);

Current v1 scope:

  • compares public readable properties and public fields recursively
  • treats collections as order-independent by default
  • uses value equality for primitives, strings, enums, dates, GUIDs, and other value types
  • ignores extra public members on the actual value when the expected value has fewer members
  • protects against infinite recursion on circular object graphs

Limitations versus FluentAssertions:

  • no options API yet (Excluding, WithStrictOrdering, custom comparers, etc.)
  • failure output stops at the first difference instead of producing a full diff
  • this assertion uses reflection for member traversal, while most other assertions remain direct non-reflective checks

Design goals

  • MIT licensed, forever. No commercial tier, no per-seat fees.
  • Zero reflection where possible — most assertions are plain equality/comparison checks; BeEquivalentTo uses public-member traversal.
  • AOT-safe — works with Native AOT test hosts.
  • Framework agnostic — throws a plain AssertionFailedException, recognized as a failure by xUnit, NUnit, and MSTest alike.
  • Familiar syntax — migrating from FluentAssertions should mostly be a find-and-replace of the using statement for the assertion types covered above.

💼 Need .NET consulting?

I'm the author of AutoAssert and a suite of compile-time source generators (AutoWire, AutoMap.Generator) and 28+ Polly v8 resilience packages. I'm available for consulting on Polly v8 resilience, Azure cloud architecture, and clean .NET design.

→ solidqualitysolutions.com · LinkedIn

Also by the same author

🌐 Full suite overview: swevo.github.io

Package Description
FluentPdf Free, MIT-licensed fluent PDF generation — alternative to QuestPDF's commercial license.
AutoBus Free, MIT-licensed message bus — alternative to MassTransit's commercial license.
AutoArchitecture Free, MIT-licensed compile-time architecture rule enforcement — alternative to NDepend.
EFCore.BulkOperations Free, MIT-licensed bulk insert/update/delete for EF Core.
AutoWire Compile-time DI auto-registration — [Scoped]/[Singleton]/[Transient] generates IServiceCollection registration code.
AutoMap.Generator Compile-time object mapping — [Map(typeof(Dto))] generates ToDto() extension methods.
AutoValidate.Generator Compile-time FluentValidation wiring.
AutoResult.Generator Compile-time Result<T> monad.
AutoDispatch.Generator Compile-time CQRS dispatcher — free alternative to MediatR's commercial license.
PollyAnalyzers Free Roslyn analyzers for async/resilience anti-patterns — blocking calls, async void, fire-and-forget tasks, swallowed exceptions.
PollyAction Free retry/backoff GitHub Action — wrap any CI step with exponential-backoff retries.

License

MIT © Justin Bannister

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • .NETStandard 2.0

    • No dependencies.
  • net8.0

    • No dependencies.
  • net9.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.1.0 95 7/10/2026
1.0.1 97 7/7/2026
1.0.0 107 7/7/2026

1.1.0: Add BeEquivalentTo deep structural equivalence for objects, nested graphs, and collections with circular-reference protection. 1.0.1: Add missing package icon. 1.0.0: Initial release. Object, string, numeric, boolean, collection, and exception assertions.