FastMoq 2.23.115

There is a newer version of this package available.
See the version list below for details.
dotnet add package FastMoq --version 2.23.115
                    
NuGet\Install-Package FastMoq -Version 2.23.115
                    
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="2.23.115" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="FastMoq" Version="2.23.115" />
                    
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 2.23.115
                    
#r "nuget: FastMoq, 2.23.115"
                    
#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.
#addin nuget:?package=FastMoq&version=2.23.115
                    
Install FastMoq as a Cake Addin
#tool nuget:?package=FastMoq&version=2.23.115
                    
Install FastMoq as a Cake Tool

FastMoq

http://help.fastmoq.com

Easy and fast extension of the Moq mocking framework for mocking and auto injection of classes when testing.

Features

  • NOW BLAZOR SUPPORT in FastMoq and FastMoq.Web.
  • Test without declaring Mocks (unless needed).
  • Creates objects with chain of automatic injections in objects and their dependencies.
  • Automatically injects and creates components or services.
  • Injection: Automatically determines what interfaces need to be injected into the constructor and creates mocks if they do not exist.
    • 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.
    • Supports Inject Attributes and multiple constructors.
  • Use Mocks without managing fields and properties. Mocks are managed by the Mocker framework. No need to keep track of Mocks. Just use them!
  • Create instances of Mocks with non public constructors.
  • HttpClient and IFileSystem test helpers
  • Supports Null method parameter testing.

Packages

  • FastMoq - Combines FastMoq.Core and FastMoq.Web. -.NET Core 6.0 and 7.0.
  • FastMoq.Core - Original FastMoq testing Mocker. -.NET Core 5.0, 6.0, and 7.0.
  • FastMoq.Web - New Blazor and Web support. -.NET Core 6.0 and 7.0.

Targets

  • .NET 7
  • .NET 6
  • .NET 5 (Deprecated. Remains in FastMoq.Core Only - Will be removed in future)
  • .NET Core 3.1 (Deprecated and removed)

Most used classes in the FastMoq namespace

public class Mocker {} // Primary class for auto mock and injection. This can be used standalone from MockerTestBase using Mocks property on the base class.
public abstract class MockerTestBase<TComponent> where TComponent : class {} // Assists in the creation of objects and provides direct access to Mocker.

Most used classes in the FastMoq.Web.Blazor namespace

public abstract class MockerBlazorTestBase<T> : TestContext, IMockerBlazorTestHelpers<T> where T : ComponentBase // Assists in the creation of Blazor components and provides direct access to Mocker.

Examples

Basic example of the base class creating the Car class and auto mocking ICarService

public class CarTest : MockerTestBase<Car> {
     [Fact]
     public void TestCar() {
         Component.Color.Should().Be(Color.Green);
         Component.CarService.Should().NotBeNull();
     }
}

public class Car {
     public Color Color { get; set; } = Color.Green;
     public ICarService CarService { get; }
     public Car(ICarService carService) => CarService = carService;
}

public interface ICarService
{
     Color Color { get; set; }
     ICarService CarService { get; }
     bool StartCar();
}

Example of how to set up for mocks that require specific functionality

public class CarTest : MockerTestBase<Car> {
     public CarTest() : base(mocks => {
             mocks.Initialize<ICarService>(mock => mock.Setup(x => x.StartCar).Returns(true));
     }
}

Auto Injection

Auto injection allows creation of components with parameterized interfaces. If an override for creating the component is not specified, the component will be created will the default Mock Objects.

Auto Injection with instance parameters

Additionally, the creation can be overwritten and provided with instances of the parameters. CreateInstance will automatically match the correct constructor to the parameters given to CreateInstance.

Mocks.CreateInstance(new MockFileSystem()); // CreateInstance matches the parameters and types with the Component constructor.
Interface Type Map

When multiple classes derive from the same interface, the Interface Type Map can map with class to use for the given injected interface. The map can also enable mock substitution.

Example of two classes inheriting the same interface
public class TestClassDouble1 : ITestClassDouble {}
public class TestClassDouble2 : ITestClassDouble {}
Mapping

This code maps ITestClassDouble to TestClassDouble1 when testing a component with ITestClassDouble.

Mocker.AddType<ITestClassDouble, TestClassDouble1>();

The map also accepts parameters to tell it how to create the instance.

Mocks.AddType<ITestClassDouble, TestClassDouble1>(() => new TestClassDouble());

Additional Documentation

FastMoq API Documentation

Breaking Change

  • 2.22.1215 ⇒ Removed support for .NET Core 3.1 in FastMoq.Core. Deprecated .NET Core 5 and moved package supporting .NET Core 5.0 from FastMoq to FastMoq.Core.
  • 1.22.810 ⇒ Removed setters on the MockerTestBase virtual methods: SetupMocksAction, CreateComponentAction, CreatedComponentAction
  • 1.22.810 ⇒ Update Package Dependencies
  • 1.22.728 ⇒ Initialize method will reset the mock, if it already exists. This is overridable by settings the reset parameter to false.
  • 1.22.604 ⇒ Renamed Mocks to Mocker, Renamed TestBase to MockerTestBase.

License - MIT

Product Compatible and additional computed target framework versions.
.NET 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 is compatible.  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 209 5/12/2025
2.28.3 182 10/18/2024
2.28.2 109 10/17/2024
2.27.6 125 8/1/2024
2.27.5 96 7/29/2024
2.27.4 237 6/27/2024
2.27.3 155 6/13/2024
2.27.2 140 5/30/2024
2.27.1 118 5/29/2024
2.27.0 125 5/28/2024
2.25.0 180 4/10/2024
2.24.300 357 2/1/2024
2.23.201 603 12/13/2023
2.23.200 482 12/2/2023
2.23.124 499 11/7/2023
2.23.123 472 11/3/2023
2.23.122 531 10/11/2023
2.23.120 583 8/31/2023
2.23.118 732 5/24/2023
2.23.117 652 5/4/2023
2.23.116 744 3/31/2023
2.23.115 834 1/14/2023
2.23.113.2138 798 1/13/2023
2.22.1215.1748 855 12/15/2022
1.22.1128.2310 888 11/28/2022
1.22.1117.1322 882 11/17/2022
1.22.1113.29 870 11/13/2022
1.22.1111.1837 880 11/11/2022
1.22.831.1343 950 8/31/2022
1.22.810.1759 952 8/10/2022
1.22.809.1253 963 8/9/2022
1.22.805.1334 991 8/5/2022
1.22.728.1251 956 7/28/2022
1.22.727.1847 934 7/27/2022
1.22.604.1441 972 6/4/2022
1.22.531.1514 983 5/31/2022
1.22.531.1336 933 5/31/2022
1.22.529.1812 940 5/29/2022
1.0.0 435 11/3/2023