SparkyTestHelpers.Moq 1.4.5

Install-Package SparkyTestHelpers.Moq -Version 1.4.5
dotnet add package SparkyTestHelpers.Moq --version 1.4.5
<PackageReference Include="SparkyTestHelpers.Moq" Version="1.4.5" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add SparkyTestHelpers.Moq --version 1.4.5
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: SparkyTestHelpers.Moq, 1.4.5"
#r directive can be used in F# Interactive, C# scripting and .NET Interactive. Copy this into the interactive tool or source code of the script to reference the package.
// Install SparkyTestHelpers.Moq as a Cake Addin
#addin nuget:?package=SparkyTestHelpers.Moq&version=1.4.5

// Install SparkyTestHelpers.Moq as a Cake Tool
#tool nuget:?package=SparkyTestHelpers.Moq&version=1.4.5
The NuGet Team does not provide support for this client. Please contact its maintainers for support.

Moq syntax helpers

see also:


Moq, “the most popular and friendly mocking framework for .NET” is great, but some of the syntax is a bit unwieldy.

This NuGet package provides extension methods that allow you to use Moq with “wieldier” (Is that a word?) syntax:

“Any” - Syntax alternative to “It.IsAny<T>”

_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

Alternate "Verify" syntax

_mock.Verify(x => x.Foo("bar", 3), Times.Once);

...can be coded as:

using SparkyTestHelpers.Moq;
. . .
_mock.VerifyOneCallTo(x => x.Foo("bar", 3));
"Verify" extension methods:
  • VerifyCallCount(int count, expresssion)
  • VerifyOneCallTo(expression)
  • VerifyAtLeastOneCallTo(expression)
  • VerifyAtMostOneCallTo(expression)
  • VerifyNoCallsTo(expression)
  • VerifyGetCount(int count, expresssion)
  • VerifyOneGet(expression)
  • VerifyAtLeastOneGet(expression)
  • VerifyAtMostOneGet(expression)
  • VerifyNoGets(expression)
  • VerifySetCount(int count, expresssion)
  • VerifyOneSet(expression)
  • VerifyAtLeastOneSet(expression)
  • VerifyAtMostOneSet(expression)
  • VerifyNoSets(expression)

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

mock.Expression extension method

...makes it easy to create a reusable expression so you don't duplicate code in ".Setup" and ".Verify" calls. 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:

using SparkyTestHelpers.Moq;
. . .
// Arrange:
var fooExp = _mock.Expression(x => 
    x.Foo(Any.String, Any.Int, Any.InstanceOf<Bar>()));
_mock.Setup(fooExp).Returns(true);

// Act:
subjectUnderTest.Foo("yo", 5, myBar);

// Assert:
_mock.VerifyOneCallTo(fooExp);

...so you only have to code the expression once, reducing finger fatigue and the possibility of the Setup and Verify expressions not matching because of a typo!

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.4.5 2,970 7/27/2019
1.4.4 3,806 12/2/2018
1.4.3 436 10/22/2018
1.4.1 427 10/20/2018
1.3.1 554 8/5/2018
1.3.0 469 7/31/2018
1.2.1 557 2/21/2018
1.2.0 559 2/14/2018
1.1.1 551 2/12/2018
1.1.0 556 2/12/2018

v1.4: Updated Moq dependency to v4.10.0, Moved some functions to SparkyTestHelpers.Moq.Core