FastMoq 1.22.529.1812
See the version list below for details.
dotnet add package FastMoq --version 1.22.529.1812
NuGet\Install-Package FastMoq -Version 1.22.529.1812
<PackageReference Include="FastMoq" Version="1.22.529.1812" />
paket add FastMoq --version 1.22.529.1812
#r "nuget: FastMoq, 1.22.529.1812"
// Install FastMoq as a Cake Addin #addin nuget:?package=FastMoq&version=1.22.529.1812 // Install FastMoq as a Cake Tool #tool nuget:?package=FastMoq&version=1.22.529.1812
FastMoq
Easy and fast extension of Moq Mocking framework for mocking and auto injection of classes.
Features
- Auto Injection into tested component constructors
- Best guess picks the multiple parameter constructor over the default constructor.
- Specific mapping allows the tester to create an instance using a specific constructor and specific data.
- Auto Mocking creation whenever a mock is first used.
Targets
- .NET 5
- .NET 6
Test Base Constructor Parameters
The following constructor parameters allow customization on the testing classes.
Action<Mocks>? setupMocksAction
Func<TComponent> createComponentAction
Action<TComponent?>? createdComponentAction
Examples
Class being tested
Testing this class will auto inject IFileSystem.
public class TestClassNormal : ITestClassNormal
{
public event EventHandler TestEvent;
public IFileSystem FileSystem { get; set; }
public TestClassNormal() { }
public TestClassNormal(IFileSystem fileSystem) => FileSystem = fileSystem;
public void CallTestEvent() => TestEvent?.Invoke(this, EventArgs.Empty);
}
Fast Start
public class TestClassNormalTestsDefaultBase : TestBase<TestClassNormal>
{
[Fact]
public void Test1()
{
Component.FileSystem.Should().NotBeNull();
Component.FileSystem.Should().BeOfType<MockFileSystem>();
Component.FileSystem.File.Should().NotBeNull();
Component.FileSystem.Directory.Should().NotBeNull();
}
}
Pre-Test Setup
public class TestClassNormalTestsSetupBase : TestBase<TestClassNormal>
{
public TestClassNormalTestsSetupBase() : base(SetupMocksAction) { }
private static void SetupMocksAction(Mocks mocks)
{
var iFile = new FileSystem().File;
mocks.Strict = true;
mocks.Initialize<IFileSystem>(mock => mock.Setup(x => x.File).Returns(iFile));
}
[Fact]
public void Test1()
{
Component.FileSystem.Should().NotBeNull();
Component.FileSystem.Should().NotBeOfType<MockFileSystem>();
Component.FileSystem.File.Should().NotBeNull();
Component.FileSystem.Directory.Should().BeNull();
}
}
Custom Setup, Creation, and Post Create routines
public class TestClassNormalTestsFull : TestBase<TestClassNormal>
{
private static bool testEventCalled;
public TestClassNormalTestsFull() : base(SetupMocksAction, CreateComponentAction, CreatedComponentAction) => testEventCalled = false;
private static void CreatedComponentAction(TestClassNormal? obj) => obj.TestEvent += (_, _) => testEventCalled = true;
private static TestClassNormal CreateComponentAction(Mocks mocks) => new(mocks.GetObject<IFileSystem>());
private static void SetupMocksAction(Mocks mocks)
{
var mock = new Mock<IFileSystem>();
var iFile = new FileSystem().File;
mocks.Strict = true;
mocks.AddMock(mock, true);
mocks.Initialize<IFileSystem>(xMock => xMock.Setup(x => x.File).Returns(iFile));
}
[Fact]
public void Test1()
{
Component.FileSystem.Should().Be(Mocks.GetMock<IFileSystem>().Object);
Component.FileSystem.Should().NotBeNull();
Component.FileSystem.File.Should().NotBeNull();
Component.FileSystem.Directory.Should().BeNull();
testEventCalled.Should().BeFalse();
Component.CallTestEvent();
testEventCalled.Should().BeTrue();
Mocks.Initialize<IFileSystem>(mock => mock.Setup(x => x.Directory).Returns(new FileSystem().Directory));
Component.FileSystem.Directory.Should().NotBeNull();
}
}
Interface Type Map
A map is available to decide which class is injected for the given interface.
Two classes
public class TestClassDouble1 : ITestClassDouble {}
public class TestClassDouble2 : ITestClassDouble {}
Mapping
This code maps ITestClassDouble to TestClassDouble1 when testing a component with ITestClassDouble.
Mocks.AddType<ITestClassDouble, TestClassDouble1>();
Auto injection
Auto injection allows creation of components by selecting the constructor with the matching parameter types and data.
private static TestClassNormal CreateComponentAction() => Mocks.CreateInstance(new MockFileSystem()); // CreateInstance matches the parameters and types with the Component constructor.
License - MIT
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 is compatible. net5.0-windows was computed. net6.0 is compatible. 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. |
-
net5.0
- coverlet.collector (>= 3.0.2)
- Microsoft.CodeAnalysis.Common (>= 3.8.0)
- Microsoft.CodeAnalysis.csHARP (>= 3.8.0)
- Moq (>= 4.17.2)
- System.IO.Abstractions (>= 17.0.15)
- System.IO.Abstractions.TestingHelpers (>= 17.0.15)
-
net6.0
- coverlet.collector (>= 3.0.2)
- Microsoft.CodeAnalysis.Common (>= 3.8.0)
- Microsoft.CodeAnalysis.csHARP (>= 3.8.0)
- Moq (>= 4.17.2)
- System.IO.Abstractions (>= 17.0.15)
- System.IO.Abstractions.TestingHelpers (>= 17.0.15)
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 |
---|---|---|
2.28.3 | 137 | 10/18/2024 |
2.28.2 | 82 | 10/17/2024 |
2.27.6 | 92 | 8/1/2024 |
2.27.5 | 65 | 7/29/2024 |
2.27.4 | 151 | 6/27/2024 |
2.27.3 | 107 | 6/13/2024 |
2.27.2 | 111 | 5/30/2024 |
2.27.1 | 95 | 5/29/2024 |
2.27.0 | 102 | 5/28/2024 |
2.25.0 | 144 | 4/10/2024 |
2.24.300 | 325 | 2/1/2024 |
2.23.201 | 547 | 12/13/2023 |
2.23.200 | 445 | 12/2/2023 |
2.23.124 | 486 | 11/7/2023 |
2.23.123 | 459 | 11/3/2023 |
2.23.122 | 518 | 10/11/2023 |
2.23.120 | 568 | 8/31/2023 |
2.23.118 | 707 | 5/24/2023 |
2.23.117 | 627 | 5/4/2023 |
2.23.116 | 720 | 3/31/2023 |
2.23.115 | 797 | 1/14/2023 |
2.23.113.2138 | 770 | 1/13/2023 |
2.22.1215.1748 | 828 | 12/15/2022 |
1.22.1128.2310 | 860 | 11/28/2022 |
1.22.1117.1322 | 852 | 11/17/2022 |
1.22.1113.29 | 841 | 11/13/2022 |
1.22.1111.1837 | 850 | 11/11/2022 |
1.22.831.1343 | 917 | 8/31/2022 |
1.22.810.1759 | 919 | 8/10/2022 |
1.22.809.1253 | 929 | 8/9/2022 |
1.22.805.1334 | 958 | 8/5/2022 |
1.22.728.1251 | 919 | 7/28/2022 |
1.22.727.1847 | 900 | 7/27/2022 |
1.22.604.1441 | 936 | 6/4/2022 |
1.22.531.1514 | 945 | 5/31/2022 |
1.22.531.1336 | 899 | 5/31/2022 |
1.22.529.1812 | 904 | 5/29/2022 |
1.0.0 | 423 | 11/3/2023 |