NFluent 2.6.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package NFluent --version 2.6.0
NuGet\Install-Package NFluent -Version 2.6.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="NFluent" Version="2.6.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add NFluent --version 2.6.0
#r "nuget: NFluent, 2.6.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.
// Install NFluent as a Cake Addin
#addin nuget:?package=NFluent&version=2.6.0

// Install NFluent as a Cake Tool
#tool nuget:?package=NFluent&version=2.6.0

NFluent is an ergonomic check library which aims to fluent your .NET TDD experience (based on simple Check.That() check statements). NFluent aims your tests to be fluent to write (with an happy 'dot' auto completion experience), fluent to read (i.e. as close as possible to plain English expression), but also fluent to troubleshoot, in a less-error-prone way comparing to the classical .NET test frameworks. NFluent is directly, but also freely, inspired by the awesome Java FEST fluent check/reflection library (

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 was computed.  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. 
.NET Core netcoreapp1.0 was computed.  netcoreapp1.1 was computed.  netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard1.3 is compatible.  netstandard1.4 was computed.  netstandard1.5 was computed.  netstandard1.6 was computed.  netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net20 is compatible.  net30 is compatible.  net35 is compatible.  net40 is compatible.  net403 was computed.  net45 is compatible.  net451 was computed.  net452 was computed.  net46 was computed.  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 tizen30 was computed.  tizen40 was computed.  tizen60 was computed. 
Universal Windows Platform uap was computed.  uap10.0 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)
Additional computed target framework(s)
Learn more about Target Frameworks and .NET Standard.

This package has no dependencies.

NuGet packages (12)

Showing the top 5 NuGet packages that depend on NFluent:

Package Downloads

NFluent checks for checking HttpResponseMessages.


Iago is a tool to write bdd like tests in kre. use `iago.runner` to execute your tests


A library for writing flexible and easy to maintain acceptance tests


multi dimension dictionary with expiration mechanism for cache invalidation


Iago runner is a tool to run bdd like tests in kre

GitHub repositories (15)

Showing the top 5 popular GitHub repositories that depend on NFluent:

Repository Stars
More than a ReClass port to the .NET platform.
WireMock.Net is a flexible product for stubbing and mocking web HTTP responses using advanced request matching and response templating. Based on the functionality from, but extended with more functionality.
The FileHelpers are a free and easy to use .NET library to read/write data from fixed length or delimited records in files, strings or streams
This repository was deprecated, use:
Entity Component System framework aiming for syntax and usage simplicity with maximum performance for game development.
Version Downloads Last updated
3.0.3 6,093 1/12/2024
3.0.3-beta 314 12/13/2023 6,137 12/12/2023 828 10/13/2023 55,486 6/9/2023 19,844 5/6/2023 9,859 3/3/2022 566 2/27/2022 560 2/27/2022 578 2/24/2022
2.8.0 445,378 2/4/2022
2.7.2 252,777 4/8/2021
2.7.1 93,113 12/29/2020
2.7.0 301,987 2/11/2020
2.6.0 202,961 8/19/2019
2.5.0 163,177 3/12/2019
2.4.0 114,766 10/2/2018
2.3.1 89,787 6/12/2018
2.3.0 2,177 6/9/2018
2.2.0 87,080 2/10/2018
2.1.1 27,896 1/5/2018
2.1.0 12,099 12/10/2017
2.0.0 63,672 6/27/2017
2.0.0-alpha-44 2,323 5/10/2017
1.3.1 225,241 7/28/2014
1.2.0 9,097 6/16/2014
1.1.0 5,173 2/14/2014
1.0.0 4,186 12/31/2013
0.11.0 2,242 11/26/2013
0.9.0 2,293 8/6/2013
0.8.0 2,160 7/6/2013
0.7.0 1,973 6/4/2013
0.6.0 1,936 5/19/2013
0.5.0 1,969 4/21/2013

## V 2.6.0

### New feature

* NFluent now supports assumption through Assuming entry point. For example you express it as :Assume.That(sut).IsEqualTo(expected); in a nutshell

you type Assuming instead of Check. All checks are available. Note that actual support depends on the underlying testing framework. As of now

it is supported for NUnit and MsTest

* NFluent now supports DateTimeOffset type with the same checks than for DateTime. These checks fails

if the offsets are different. The IsSameUtcInstant cheks perform a comparison integrating the offset.

### New checks

* You can use WhoseSize() to check the size of an enumeration. It is used as an extension keyword, as in:


### Improvements

* When using the Equals method, NFluent now uses expected.Equals(actual) instead of actual.Equals(expected).

This should have limited impact.

* Actual and expected value naming has been redesigned to improve naming accuracy. Impact vary depending on checks and types.

* Comparison of enumeration now provides details regarding the differences. You can control

how many differences are reported using the property **ExtensionsCommonHelpers.CountOfLineOfDetails**.

* Cleaned up the reporting of array fields when using Considering. The superfluous dot (as in _field.[index]_)

has been removed.

* Improved implementation for Equals when using Considering. You should use IsEqualTo when checking for

* equality, but we also provide an implementation of Equals as a failsafe.

### Fixes

* Fix issue with IEnumerable<object> and Contains(Exactly), IsEqualTo, IsEquivalentTo.

* Several error messages have been improved due to fix on check helpers.

* NotSupportedException when using ContainsExactly on strings.

* Fix issue with single dimension arrays and field based checks where the LAST item of the array

* was not evaluated during the check (issue found thanks to mutation test)

* Comparing Array with considering was no different than when using IsEqualTo. This has been fixed.

Therefore error messages are now in line with what was expected

### Extensibility

Foreword: several breaking changes have been introduced that may trigger build error in your custom extensions if you have made any.

Methods and types have been renamed, so your code will have to refer the new names. IF YOU ENCOUNTER ISSUES AND NEED ASSISTANCE, please open an issue, we will assist you ASAP.

* All lambda/code specific interfaces (ICodeCheck<T>...) and classes have been removed. NFluent now uses the standard interfaces and types (i.e. Check<T>)

* ICheckLogic.DefineExpectedValues now expects an generic IEnumerable<T> instead of a plain IEnumerable

* you can use ICheckLogic.DefinePossibleTypes if you need to have a list of possible types for the sut (displayed in the error message)

* improved naming: ICheckLogic.DefineExpectedValues has been renamed DefinePossibleValues

* checks helper (ICheckLogic) now correctly reports the fundamental error instead of a detail error. In previous version, the error messages could focus on details, e.g. report the

exception's message when the issue is the exception's type.

* add a flag (boolean) to BuildCheckLinkWhich method (allows to provide subitem check) that allows to speciyf sub item is available.

### GitHub Issues

* #225, #291, #292, #295, #296, #297, #299, #302

## V 2.5.0

### Main feature

* **CaptureConsole class** mocks the system console. Using it you can inject/simulate

user input (with **Input** and **InputLine** methods) and read/review what the code has put on the

console (with the **Output** property). The class is disposable: normal behavior

is restored on Dispose.


using (var console = new CaptureConsole)



// the code I need to check (a calculator here)


// perform the check



### New checks

* Console related checks (see above)

### Improvements

* Stabilize Assembly Version to reduce friction induced by strong naming (assembly version is still V2.4.0)

* Align to Microsoft guidelines for OSS libraries (

* HasAvalue() and HasNoValue() are available on all nullable types

* Add support for WithCustomMessage for dynamics.

* Revised signature for enumerable checks to reduce type erasure (loss of type information when chaining checks). Regression tests have been added regarding non generic IEnumerable support, but as the changes

are significant, please revert to us if you face issues.

* Fixes reporting of end of line markers: only carriage return chars were reported.

* Changed error text for missing or extra lines in string to make it clearer.

* IsEqualTo provides more details for IEnumerable (make sure first different item is visible).

* Number of items in expected value was often not reported in error messages.

### Fixes

* Fix false positive with TimeSpan due linked to precision loss. It concerns: IsEqualTo(TimeSpan), IsLessThan(TimeSpan), IsGreaterThan(TimeSpan)

* Fix random FileNotFound exceptions on the first failing assertion while using XUnit in some specific setup.

* Error message for Check.ThatCode().LastsLessThan did not report the actual time.

* Error message for Not.ThrowsAny() was wrong.

* Hashtable not properly reported in error messages.

* Fixed error messages for negated checks on dynamics.

* Fix false positive for IsNotZero (and IsZero) for decimal that are close to 0 (<.5).

* IsEquivalentTo now supports dictionary types.

* IsEqualTo now supports dictionary types. Error message hints to use IsEquivalentTo when relevant.

### GitHub Issues

* #269, #274, #270, #275, #276, #280, #283, #184, #284, #286, #290


## V 2.4.0

### Main feature: Custom explicit error message

You can now provides explicit error messages for each check, thanks to **WithCustomMessage**. E.g:

Check.WithCustomMessage("Ticket must be valid at this stage").That(ticket.Status).IsEqualTo(Status.Valid);

This feature has often been requested  and we are happy to finaly deliver it, but please keep on

naming your test methods properly.

Custom error messages are not avaible for dynamic types.

### New checks

* IsInAscendingOrder: checks if an IEnumerable is sorted in ascending orders, it accepts an optional comparer instance

* IsInDescendingOrder:  checks if an IEnumerable is sorted in descending orders, it accepts an optional comparer instance

* IsSubSetOf: checks if an IEnumerable is a subset of another collection.

* IsInstanceOf<Type>(): now supports the Which() keyword so you may use checks specific to the asserted type.

### Improvements

* Truncation default lenght for message is now 20Ko as an experiment. Please bring feedback. You can still adjust

* default truncation with the Check.StringTruncationLength property

* Multidimensional arrays are properly reported in error messages, respecting index structure.

* Sourcelink (Net Core 2.1+ and Net Standard 2.0): you can debug through NFluent code using Sourlink on Core 2.1 projects

* Multi dimensional array types are reported with the number of dimensions (eg: int[,,])

### Fixes

* As now works with Not (and vice versa).

* Exception when using HasElementThatMatches or ContainsOnlyElementsThatMatch on arrays, and possibly

other enumerable types.

* Exception when using multidimensional arrays (such as  int[2,5]) with Considering/HasFiedsWithSameValueAs.

* false Negative when comparing multimensionnal arrays, e.g.: int[3,5] was equal to int[5,3] and with int[15].

* Exception when reporting strings containing braces.

### GitHub Issues

* #255, #38, #166, #258, #259, #260, #261, #262, #264, #265

## V 2.3.1


### Fixes

* NullReferenceException on failed check using xUnit and NetCore

### GitHub Issues

* #251


## V 2.3.0


### Main feature: redesigned extensibility

One of the fundamental features of NFluent is that you can add your own checks.

Articles explained how to do that, but syntax was still too cumbersome

for our taste. This version brings major improvements detailed here:

* Simplified support for creating custom checks thanks to new helper methods

and classes (see

* Customization of error reporting: by default, any check failure is reported

by raising an exception. You can now provide your own reporting system. You need to provide an implementation

of IErrorReporter interface, and specify you want to use it by setting the Check.Reporter interface.

### Other New features(s)

* IsNullOrWhiteSpace: checks if a string is null, empty or contains only white space(s).

* IReadOnlyDictionary (_Net 4.5+_)

* ContainsKey, ContainsValue, ContainsPair are supported.

* async method/delegates

* Check.ThatCode now supports _async_ methods/delegates transparently.

* Check expression now provides the result as a string. I.e Check.That(true).IsTrue().ToString() returns "Success".

* New check: IsDefaultValue, which fails if the sut is not the default value for its type: null for ref types, 0 for value types.

* New check: ContainsNoDuplicateItem for enumerable, that fails of it contains a dupe.

* New check: IsEquivalentTo for enumerable, that checks if its contents match an expected content, disregarding order.

* New check: DoesNotContainNull for enumerable, that fails if an entry is null.

* New check: IsAnInstanceOfOneOf that checks if the sut is of one of exptected types.

* New check: IsNotAnInstanceOfThese that checks if the sut type is different from a list of forbidden types.

* New check: DueToAnyFrom(...) that checks that an exception has been triggered by another exception from a list of possible types.

### Fixes

* Check.ThatCode(...).Not.Throws\<T\>() may throw an InvalidCastException when thrown exception is not T.

* Extension checks to Throw\<\>, ThrowType or ThrowAny raise an exception when used with Not as it does not make sense.

* Which() raises an exception when used on a negated check (Not).

* Fix exception when using Considering and indexed properties.

* Fix loss of type when using Contains and ContainsExactly. This restores fluentness for IEnumerable<T> types.

Fixed error messages for double (and float) equality check that reported checked value in place of the expected one.

* Fixed error messages for Check.That(TimeSpan).IsGreaterThan

* False positive whith Considering() or HasFieldsWithSameValues when haing ints and enum attributes with the same value.

### Changes

* Improved error messages

* ContainsOnlyElementsThatMatch: now provides the index and value of the first failing value.

* IsOnlyMadeOf: improved error messages

* DateTime checks: revamped all messages

* Enum: error message on enum types now use 'enum' instead of 'value'.

* IsInstanceOf: be more specific regarding types

* Considering()...IsNull/IsNotNull: error messages specify member triggering the failure.

* Breaking

* Added automatic conversion between decimal and other numerical types. Check.That(100M).IsEqualTo(100) no longer fails.

* Removed Failure method from IChecker interface

### GitHub Issues

* #228, #227, #222, #223, #217, #230, #232,

* #236, #238, #242, #243, #244, #245, #246,

* #231, #247, #161, #249