NFluent 2.4.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 (

There is a newer version of this package available.
See the version list below for details.
Install-Package NFluent -Version 2.4.0
dotnet add package NFluent --version 2.4.0
<PackageReference Include="NFluent" Version="2.4.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add NFluent --version 2.4.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.

Release Notes

## 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

### 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



This package has no dependencies.

NuGet packages (6)

Showing the top 5 NuGet packages that depend on NFluent:

Package Downloads
Iago is a tool to write bdd like tests in kre. use `iago.runner` to execute your tests
Iago runner is a tool to run bdd like tests in kre
Parses offline registry hives
A library for writing flexible and easy to maintain acceptance tests
NFluent checks for checking HttpResponseMessages.

GitHub repositories (11)

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

Repository Stars
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:
Not just a ReClass port to the .NET platform.
Captains log and 3d star map for Elite Dangerous
WireMock.Net is a flexible library for stubbing and mocking web HTTP responses using request matching and response templating. Based on the functionality from, but extended with more functionality.

Version History

Version Downloads Last updated
2.7.0 70,560 2/11/2020
2.6.0 87,936 8/19/2019
2.5.0 79,807 3/12/2019
2.4.0 78,651 10/2/2018
2.3.1 54,820 6/12/2018
2.3.0 904 6/9/2018
2.2.0 46,527 2/10/2018
2.1.1 21,387 1/5/2018
2.1.0 9,579 12/10/2017
2.0.0 53,605 6/27/2017
2.0.0-alpha-44 1,365 5/10/2017
2.0.0-alpha 5,453 9/22/2016
1.3.1 167,694 7/28/2014
1.2.0 7,927 6/16/2014
1.1.0 3,722 2/14/2014
1.0.0 1,470 12/31/2013
0.11.0 1,069 11/26/2013
0.9.0 1,228 8/6/2013
0.8.0 878 7/6/2013
0.7.0 841 6/4/2013
0.6.0 808 5/19/2013
0.5.0 905 4/21/2013