SparkyTestHelpers.Moq.Fluent 1.4.7

Unit test helpers providing "fluent" assertions for testing with Moq

Install-Package SparkyTestHelpers.Moq.Fluent -Version 1.4.7
dotnet add package SparkyTestHelpers.Moq.Fluent --version 1.4.7
<PackageReference Include="SparkyTestHelpers.Moq.Fluent" Version="1.4.7" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add SparkyTestHelpers.Moq.Fluent --version 1.4.7
The NuGet Team does not provide support for this client. Please contact its maintainers for support.

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();

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();

Version History

Version Downloads Last updated
1.4.7 118 11/22/2018
1.4.6 113 11/13/2018
1.4.5 99 10/30/2018
1.4.4 105 10/23/2018
1.4.3 108 10/22/2018
1.4.1 106 10/22/2018