![]() |
VOOZH | about |
dotnet add package NFluent --version 3.1.0
NuGet\Install-Package NFluent -Version 3.1.0
<PackageReference Include="NFluent" Version="3.1.0" />
<PackageVersion Include="NFluent" Version="3.1.0" />Directory.Packages.props
<PackageReference Include="NFluent" />Project file
paket add NFluent --version 3.1.0
#r "nuget: NFluent, 3.1.0"
#:package NFluent@3.1.0
#addin nuget:?package=NFluent&version=3.1.0Install as a Cake Addin
#tool nuget:?package=NFluent&version=3.1.0Install as a Cake Tool
Chat 👁 Gitter
Issues
👁 GitHub issues
👁 GitHub closed issues
NFluent is an assertion library which aims to fluent your .NET TDD experience.
Official site: http://www.n-fluent.net/
NFluent will make your tests:
NFluent is directly inspired by the awesome Java FEST Fluent check/reflection library and it most famous fork AssertJ library.
NFluent is not coupled to any .NET unit test framework. It is fully designed to work in collaboration with your favorite one.
Your favorite unit test framework (e.g. NUnit, xUnit, ...) will still handle the test identification, execution & Co. All you have to do is to replace your usage of its Assert or Assert.That() statements, by the Check.That() NFluent statement form. That's all!
Indeed, we decided to use the Check.That() syntax to avoid collisions and name ambiguity with the traditional Assert class you can find in most of your .NET unit test frameworks (therefore, no need to declare an alias in your test fixtures).
In fact, test runners and check libraries are two orthogonal topics and concerns.
With Nfluent check libraries:
Check.That, 'cause every check is then provided via a super-duper-auto-completion-dot-experience 😉With NFluent, you can write simple checks like this:
var integers = new int[] { 1, 2, 3, 4, 5, 666 };
Check.That(integers).Contains(3, 5, 666);
integers = new int[] { 1, 2, 3 };
Check.That(integers).IsOnlyMadeOf(3, 2, 1);
var guitarHeroes = new[] { "Hendrix", "Paco de Lucia", "Django Reinhardt", "Baden Powell" };
Check.That(guitarHeroes).ContainsExactly("Hendrix", "Paco de Lucia", "Django Reinhardt", "Baden Powell");
var camus = new Person() { Name = "Camus" };
var sartre = new Person() { Name = "Sartre" };
Check.That(camus).IsNotEqualTo(sartre).And.IsInstanceOf<Person>();
var heroes = "Batman and Robin";
Check.That(heroes).Not.Contains("Joker").And.StartsWith("Bat").And.Contains("Robin");
int? one = 1;
Check.That(one).HasAValue().Which.IsStrictlyPositive().And.IsEqualTo(1);
const Nationality FrenchNationality = Nationality.French;
Check.ThatEnum(FrenchNationality).IsNotEqualTo(Nationality.Korean);
string motivationalSaying = "Failure is the mother of success.";
Check.That(motivationalSaying).IsNotInstanceOf<int>();
with NFluent, you can also write checks like this:
var persons = new List<Person>
{
new Person { Name = "Thomas", Age = 38 },
new Person { Name = "Achille", Age = 10, Nationality = Nationality.French },
new Person { Name = "Anton", Age = 7, Nationality = Nationality.French },
new Person { Name = "Arjun", Age = 7, Nationality = Nationality.Indian }
};
Check.That(persons.Extracting(nameof(Person.Name))).ContainsExactly("Thomas", "Achille", "Anton", "Arjun");
Check.That(persons.Extracting(nameof(Person.Age))).ContainsExactly(38, 10, 7, 7);
Check.That(persons.Extracting(nameof(Person.Nationality))).ContainsExactly(Nationality.Unknown, Nationality.French, Nationality.French, Nationality.Indian);
// more fluent than the following classical NUnit way, isn't it?
// CollectionAssert.AreEquivalent(persons.Properties(nameof(Person.Age)), new[] { 38, 10, 7, 7 });
// it's maybe even more fluent than the java versions
// FEST fluent assert v 2.x:
// assertThat(extractProperty("name" , String.class).from(inn.getItems())).containsExactly("+5 Dexterity Vest", "Aged Brie", "Elixir of the Mongoose", "Sulfuras, Hand of Ragnaros", "Backstage passes to a TAFKAL80ETC concert", "Conjured Mana Cake");
// FEST fluent assert v 1.x:
// assertThat(inn.getItems()).onProperty("name").containsExactly("+5 Dexterity Vest", "Aged Brie", "Elixir of the Mongoose", "Sulfuras, Hand of Ragnaros", "Backstage passes to a TAFKAL80ETC concert", "Conjured Mana Cake");
or like this:
// Works also with lambda for exception checking
Check.ThatCode(() => { throw new InvalidOperationException(); }).Throws<InvalidOperationException>();
// or execution duration checking
Check.ThatCode(() => Thread.Sleep(30)).LastsLessThan(60, TimeUnit.Milliseconds);
<subjectUnderTest>.Should().... why don't they choose Must instead?!?). And thus, you'd rather rely on a stronger semantic for your checks (i.e. NFluent's Check.That).Can't be more easy: NFluent is available on nuget.org
.
For any comment, remark or question about the library, please use the NFluent-Discuss google group.
Nfluent backlog is now available as github issues
To the other amazing contributors: Marc-Antoine LATOUR, Rui CARVALHO & Cyrille DUPUYDAUBY.
To Rui CARVALHO, for the nice NFluent logo he has designed.
To the mates that gave me ideas and feedbacks to make this lib as fluent as possible: Joel COSTIGLIOLA (former active contributor of Java FEST Assert, which now works on his AssertJ fork), Rui CARVALHO, Cyrille DUPUYDAUBY, Benoit LABAERE, ...
To Omer RAVIV, which supports the NFluent project by offering us some free licenses for the nice BugAid Visual Studio extensions.
To AppVeyor CI, which now supports NFluent builds.
/ September 2016
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 net5.0 was computed. net5.0-windows net5.0-windows was computed. net6.0 net6.0 was computed. net6.0-android net6.0-android was computed. net6.0-ios net6.0-ios was computed. net6.0-maccatalyst net6.0-maccatalyst was computed. net6.0-macos net6.0-macos was computed. net6.0-tvos net6.0-tvos was computed. net6.0-windows net6.0-windows was computed. net7.0 net7.0 was computed. net7.0-android net7.0-android was computed. net7.0-ios net7.0-ios was computed. net7.0-maccatalyst net7.0-maccatalyst was computed. net7.0-macos net7.0-macos was computed. net7.0-tvos net7.0-tvos was computed. net7.0-windows net7.0-windows was computed. net8.0 net8.0 is compatible. net8.0-android net8.0-android was computed. net8.0-browser net8.0-browser was computed. net8.0-ios net8.0-ios was computed. net8.0-maccatalyst net8.0-maccatalyst was computed. net8.0-macos net8.0-macos was computed. net8.0-tvos net8.0-tvos was computed. net8.0-windows net8.0-windows was computed. net9.0 net9.0 was computed. net9.0-android net9.0-android was computed. net9.0-browser net9.0-browser was computed. net9.0-ios net9.0-ios was computed. net9.0-maccatalyst net9.0-maccatalyst was computed. net9.0-macos net9.0-macos was computed. net9.0-tvos net9.0-tvos was computed. net9.0-windows net9.0-windows was computed. net10.0 net10.0 was computed. net10.0-android net10.0-android was computed. net10.0-browser net10.0-browser was computed. net10.0-ios net10.0-ios was computed. net10.0-maccatalyst net10.0-maccatalyst was computed. net10.0-macos net10.0-macos was computed. net10.0-tvos net10.0-tvos was computed. net10.0-windows net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 netcoreapp2.0 was computed. netcoreapp2.1 netcoreapp2.1 was computed. netcoreapp2.2 netcoreapp2.2 was computed. netcoreapp3.0 netcoreapp3.0 was computed. netcoreapp3.1 netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 netstandard2.0 is compatible. netstandard2.1 netstandard2.1 was computed. |
| .NET Framework | net35 net35 is compatible. net40 net40 was computed. net403 net403 was computed. net45 net45 was computed. net451 net451 was computed. net452 net452 was computed. net46 net46 was computed. net461 net461 was computed. net462 net462 is compatible. net463 net463 was computed. net47 net47 was computed. net471 net471 was computed. net472 net472 was computed. net48 net48 was computed. net481 net481 was computed. |
| MonoAndroid | monoandroid monoandroid was computed. |
| MonoMac | monomac monomac was computed. |
| MonoTouch | monotouch monotouch was computed. |
| Tizen | tizen40 tizen40 was computed. tizen60 tizen60 was computed. |
| Xamarin.iOS | xamarinios xamarinios was computed. |
| Xamarin.Mac | xamarinmac xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos xamarinwatchos was computed. |
Showing the top 5 NuGet packages that depend on NFluent:
| Package | Downloads |
|---|---|
|
Amcache
Parses Amcache hives |
|
|
Krosoft.Extensions.Testing
Package pour faciliter la mise en place de tests. |
|
|
Seeq.Link.SDK.TestFramework
Framework for performing standard tests of Seeq .NET connectors |
|
|
NFluent.Json
Package Description |
|
|
sas.nfluent
Includes NFluent extensions to ease the check of status codes and payloads of an API when using the Scenario/API/Simulators concept. |
Showing the top 16 popular GitHub repositories that depend on NFluent:
| Repository | Stars |
|---|---|
|
ReClassNET/ReClass.NET
More than a ReClass port to the .NET platform.
|
|
|
zzzprojects/System.Linq.Dynamic.Core
The .NET Standard / .NET Core version from the System Linq Dynamic functionality.
|
|
|
MarcosMeli/FileHelpers
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
|
|
|
WOA-Project/WoA-Installer-Rpi
This repository was deprecated, use:
|
|
|
Doraku/DefaultEcs
Entity Component System framework aiming for syntax and usage simplicity with maximum performance for game development.
|
|
|
msarilar/EDEngineer
An overlay to track Elite Dangerous blueprints progress in real time
|
|
|
b3b00/csly
a C# embeddable lexer and parser generator (.Net core)
|
|
|
mareek/UUIDNext
A fast and modern .NET library to generate UUID/GUID that are either sequential and database friendly (versions 7), name based (versions 5) or random (version 4).
|
|
|
EricZimmerman/evtx
C# based evtx parser with lots of extras
|
|
|
EricZimmerman/Registry
Full featured, offline Registry parser in C#
|
|
|
Doraku/DefaultDocumentation
Create a simple markdown documentation from the Visual Studio xml one.
|
|
|
takenet/textc-csharp
Textc is a natural language processing library that allows developers build text command based applications with extensible text parsing capabilities.
|
|
|
EricZimmerman/AmcacheParser
Parses amcache.hve files, but with a twist!
|
|
|
StefH/SimMetrics.Net
SimMetrics is a Similarity Metric Library, e.g. from edit distance's (Levenshtein, Gotoh, Jaro etc) to other metrics, (e.g Soundex, Chapman). This library support multiple .NET versions including .NET Core (NETStandard 1.x)
|
|
|
tpierrain/hexagonalThis
A simple kata to live-code with Alistair about Hexagonal Architecture
|
|
|
EricZimmerman/AppCompatCacheParser
AppCompatCache (shimcache) parser. Supports Windows 7 (x86 and x64), Windows 8.x, and Windows 10, and Windows 11
|
| Version | Downloads | Last Updated |
|---|---|---|
| 3.1.0 | 650,393 | 11/27/2024 |
| 3.0.4 | 291,577 | 3/19/2024 |
| 3.0.3 | 69,528 | 1/12/2024 |
| 3.0.3-beta | 626 | 12/13/2023 |
| 3.0.2.500 | 18,328 | 12/12/2023 |
| 3.0.2.327-beta | 1,727 | 10/13/2023 |
| 3.0.1.352 | 144,610 | 6/9/2023 |
| 3.0.0.351 | 32,186 | 5/6/2023 |
| 3.0.0.277-beta | 14,244 | 3/3/2022 |
| 3.0.0.270-beta | 1,114 | 2/27/2022 |
| 3.0.0.269-beta | 1,125 | 2/27/2022 |
| 3.0.0.268-beta | 1,101 | 2/24/2022 |
| 2.8.0 | 716,833 | 2/4/2022 |
| 2.7.2 | 292,942 | 4/8/2021 |
fix issue #342 and 343