FastMoq 1.22.529.1812

There is a newer version of this package available.
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
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="FastMoq" Version="1.22.529.1812" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="FastMoq" Version="1.22.529.1812" />
                    
Directory.Packages.props
<PackageReference Include="FastMoq" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add FastMoq --version 1.22.529.1812
                    
#r "nuget: FastMoq, 1.22.529.1812"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package FastMoq@1.22.529.1812
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=FastMoq&version=1.22.529.1812
                    
Install as a Cake Addin
#tool nuget:?package=FastMoq&version=1.22.529.1812
                    
Install as a Cake Tool

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 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.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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
3.0.0 269 5/12/2025
2.28.3 221 10/18/2024
2.28.2 149 10/17/2024
2.27.6 157 8/1/2024
2.27.5 141 7/29/2024
2.27.4 280 6/27/2024
2.27.3 192 6/13/2024
2.27.2 176 5/30/2024
2.27.1 147 5/29/2024
2.27.0 168 5/28/2024
2.25.0 214 4/10/2024
2.24.300 390 2/1/2024
2.23.201 638 12/13/2023
2.23.200 496 12/2/2023
2.23.124 519 11/7/2023
2.23.123 495 11/3/2023
2.23.122 548 10/11/2023
2.23.120 615 8/31/2023
2.23.118 773 5/24/2023
2.23.117 708 5/4/2023
2.23.116 791 3/31/2023
2.23.115 875 1/14/2023
2.23.113.2138 855 1/13/2023
2.22.1215.1748 896 12/15/2022
1.22.1128.2310 929 11/28/2022
1.22.1117.1322 935 11/17/2022
1.22.1113.29 931 11/13/2022
1.22.1111.1837 921 11/11/2022
1.22.831.1343 1,012 8/31/2022
1.22.810.1759 1,005 8/10/2022
1.22.809.1253 1,020 8/9/2022
1.22.805.1334 1,043 8/5/2022
1.22.728.1251 1,022 7/28/2022
1.22.727.1847 986 7/27/2022
1.22.604.1441 1,023 6/4/2022
1.22.531.1514 1,041 5/31/2022
1.22.531.1336 989 5/31/2022
1.22.529.1812 999 5/29/2022
1.0.0 462 11/3/2023