SparkyTestHelpers.Moq.Fluent
1.6.0
dotnet add package SparkyTestHelpers.Moq.Fluent --version 1.6.0
NuGet\Install-Package SparkyTestHelpers.Moq.Fluent -Version 1.6.0
<PackageReference Include="SparkyTestHelpers.Moq.Fluent" Version="1.6.0" />
paket add SparkyTestHelpers.Moq.Fluent --version 1.6.0
#r "nuget: SparkyTestHelpers.Moq.Fluent, 1.6.0"
// Install SparkyTestHelpers.Moq.Fluent as a Cake Addin #addin nuget:?package=SparkyTestHelpers.Moq.Fluent&version=1.6.0 // Install SparkyTestHelpers.Moq.Fluent as a Cake Tool #tool nuget:?package=SparkyTestHelpers.Moq.Fluent&version=1.6.0
Moq Fluent Assertions syntax helpers
see also:
This package provides Fluent Assertions extension methods for Moq, “the most popular and friendly mocking framework for .NET”.
The "out of the box" syntax:
_mock.Verify(x => x.Foo());
_mock.Verify(x => x.Foo(), Times.Once);
_mock.Verify(x => x.Foo(), Times.AtLeastOnce);
_mock.Verify(x => x.Foo(), Times.AtMostOnce);
_mock.Verify(x => x.Foo(), Times.Exactly(3));
_mock.Verify(x => x.Foo(), Times.Between(2, 5));
_mock.Verify(x => x.Foo(), Times.AtLeast(2));
_mock.Verify(x => x.Foo(), Times.AtMost(5));
_mock.Verify(x => x.Foo(), Times.Never);
...can be coded as:
_mock.Should().HaveCallsTo(x => x.Foo());
_mock.Should().HaveOneCallTo(x => x.Foo());
_mock.Should().HaveAtLeastOneCallTo(x => x.Foo());
_mock.Should().HaveAtMostOneCallTo(x => x.Foo());
_mock.Should().HaveCallCount(3).To(x => x.Foo());
_mock.Should().HaveCallCount(2, 5).To(x => x.Foo());
_mock.Should().HaveCallCount(2).OrMore().To(x => x.Foo());
_mock.Should().HaveCallCount(5).OrLess().To(x => x.Foo());
_mock.Should().NoCallsTo(x => x.Foo());
...or as:
_mock.Method(x => x.Foo()).Should().HaveBeenCalled();
_mock.Method(x => x.Foo()).Should().HaveBeenCalledOnce();
_mock.Method(x => x.Foo()).Should().HaveBeenCalledAtLeastOnce();
_mock.Method(x => x.Foo()).Should().HaveBeenCalledAtMostOnce();
_mock.Method(x => x.Foo()).Should().HaveCallCount(3);
_mock.Method(x => x.Foo()).Should().HaveCallCountBetween(2, 5);
_mock.Method(x => x.Foo()).Should().HaveCallCountOfAtLeast(2);
_mock.Method(x => x.Foo()).Should().HaveCallCountOfAtMost(5);
_mock.Method(x => x.Foo()).Should().NotHaveBeenCalled();
There are property Get and Set equivalents for all of the ".Method ... .Should... .HaveBeen" methods listed above:
_mock.Get(x => x.Bar).Should().HaveBeenCalledOnce();
_mock.Set(x => x.Bar = "Baz").Should().HaveBeenCalledOnce();
“Any” - Syntax alternative to “It.IsAny<T>”
This package incorporates SparkyTestHelpers.Moq.Core, which enables simplified "Any" syntax:
_mock.Setup(x => x.DoSomething(
It.IsAny<string>(), It.IsAny<int>(), It.IsAny<IEnumerable<int>>())
.Returns(true);
...can be simplified to:
using SparkyTestHelpers.Moq;
. . .
_mock.Setup(x => x.DoSomething(
Any.String, Any.Int, Any.IEnumerable<int>())
.Returns(true);
"Any" members:
- Any.Action
- Any.Action<T>
- Any.Action<T1, T2>
- Any.Action<T1, T2, T3>
- Any.Array<T>
- Any.Boolean
- Any.Dictionary<TKey, TValue>
- Any.DateTime
- Any.Decimal
- Any.Double
- Any.Func<T>
- Any.Func<T1, T2>
- Any.Func<T1, T2, T3>
- Any.Guid
- Any.IEnumerable<T>
- Any.InstanceOf<T> (Any.One<T> is a "synonym" for Any.InstanceOf<T>)
- Any.IList<T>
- Any.Int
- Any.IQueryable<T?
- Any.KeyValuePair<TKey, TValue>
- Any.Lazy<T>
- Any.List<T>
- Any.Long
- Any.Nullable<T>
- Any.Object
- Any.Short
- Any.Single
- Any.String
- Any.TimeSpan
- Any.Tuple<T1, T2>
- Any.Type
- Any.UInt
- Any.ULong
- Any.UShort
mock.Where extension method
...provides an alternate syntax for "It.Is":
using SparkyTestHelpers.Moq;
. . .
// sad:
_mock.Setup(x => x.Foo(It.Is<int>(i => i % 2 == 0))).Returns(true);
// rad!:
_mock.Setup(x => x.Foo(Any.Int.Where(i => i % 2 == 0))).Returns(true);
Reduce code duplication
The Method, Get and Set extensions return their input expressions/actions, which can be used to reduce code duplication.
For example, this test:
// Arrange:
_mock.Setup(x => x.Foo(
Any.String, Any.Int, Any.InstanceOf<Bar>())
).Returns(true);
// Act:
subjectUnderTest.Foo("yo", 5, myBar);
//Assert:
_mock.VerifyOneCallTo(x => x.Foo(
Any.String, Any.Int, Any.InstanceOf<Bar>()));
...where you have to code the same “x ⇒ x.Foo(Any.String, Any.Int, Any.InstanceOf<Bar>()” expression for both the .Setup and .Verify calls - can be simplified to:
// Arrange:
var fooCall = _mock.Method(x => x.Foo(Any.String, Any.Int, Any.InstanceOf<Bar>())).Expression;
_mock.Setup(fooCall).Returns(true);
// Act:
subjectUnderTest.Foo("yo", 5, myBar);
// Assert:
_mock.Method(fooCall).Should().HaveBeenCalledOnce();
Product | Versions 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 | 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 is compatible. 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. |
-
.NETFramework 4.6.1
- FluentAssertions (>= 6.2.0)
- SparkyTestHelpers.Moq.Core (>= 1.5.1)
-
.NETStandard 2.0
- FluentAssertions (>= 6.2.0)
- SparkyTestHelpers.Moq.Core (>= 1.5.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
v1.5 - Upgraded to .NET Standard 2.0, FluentAssertions 6.2
v1.6 - Added "HaveCalledOnly"