SparkyTestHelpers.Moq
1.3.1
See the version list below for details.
dotnet add package SparkyTestHelpers.Moq --version 1.3.1
NuGet\Install-Package SparkyTestHelpers.Moq -Version 1.3.1
<PackageReference Include="SparkyTestHelpers.Moq" Version="1.3.1" />
paket add SparkyTestHelpers.Moq --version 1.3.1
#r "nuget: SparkyTestHelpers.Moq, 1.3.1"
// Install SparkyTestHelpers.Moq as a Cake Addin #addin nuget:?package=SparkyTestHelpers.Moq&version=1.3.1 // Install SparkyTestHelpers.Moq as a Cake Tool #tool nuget:?package=SparkyTestHelpers.Moq&version=1.3.1
Moq syntax helpers
see also:
- the rest of the "Sparky suite" of .NET utilities and test helpers
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.Fooify("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.Fooify("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!
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 | netcoreapp1.0 was computed. netcoreapp1.1 was computed. netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard1.3 is compatible. netstandard1.4 was computed. netstandard1.5 was computed. netstandard1.6 was computed. netstandard2.0 was computed. netstandard2.1 was computed. |
.NET Framework | net46 was computed. net461 was computed. 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 | tizen30 was computed. tizen40 was computed. tizen60 was computed. |
Universal Windows Platform | uap was computed. uap10.0 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 1.3
- Moq (>= 4.8.1)
- NETStandard.Library (>= 1.6.1)
- SparkyTestHelpers (>= 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.3: "Any" class made "partial" so it can be extended with your own domain types, added Any .Exception, .Float, .Guid, .Lazy<T>, .Nullable<T>, .One<T> (pseudonym for Any.InstanceOf<T>), .Short, .UInt, .ULong, .UShort