Mokkit 0.4.0
dotnet add package Mokkit --version 0.4.0
NuGet\Install-Package Mokkit -Version 0.4.0
<PackageReference Include="Mokkit" Version="0.4.0" />
<PackageVersion Include="Mokkit" Version="0.4.0" />
<PackageReference Include="Mokkit" />
paket add Mokkit --version 0.4.0
#r "nuget: Mokkit, 0.4.0"
#:package Mokkit@0.4.0
#addin nuget:?package=Mokkit&version=0.4.0
#tool nuget:?package=Mokkit&version=0.4.0
<p align="center"> <img src="https://raw.githubusercontent.com/GrafGenerator/mokkit/main/assets/banner.png" alt="Mokkit — write tests that read like a story, in plain C#" width="820"> </p>
Mokkit gives your tests the readability of BDD tools like Cucumber/SpecFlow, but with no DSL: no feature files, no step bindings, no runtime glue. The "steps" are just C# extension methods you author — your project's testing vocabulary — so you keep full IDE support (autocomplete, go-to-definition, refactoring) and a test that doesn't make sense simply won't compile.
It's a thin orchestration layer, not a framework: run it inside xUnit / NUnit / MSTest / TUnit, mock with Moq / NSubstitute / FakeItEasy, and wire with Microsoft DI / Autofac / Castle Windsor (or the dependency-free Bag). The same Arrange / Act / Inspect vocabulary scales from a mocked unit test to a full Testcontainers end-to-end run.
// A Mokkit test reads like the scenario it describes.
[Fact]
public async Task Suspending_a_client_reflects_everywhere()
{
await Arrange
.NewClient(out var clientId, WithName("Acme Corporation"))
.CacheHasClient(clientId);
await Act(clientId, ClientStatus.Suspended);
await Inspect
.ApiClientEventually(clientId, c => c.Status == Suspended)
.DbClient(clientId, c => c!.Status.ShouldBe(Suspended))
.EventPublished("clients.updated", clientId);
}
NewClient, CacheHasClient, ApiClientEventually, DbClient, EventPublished aren't Mokkit APIs — they're
your verbs. Mokkit provides the Arrange / Act / Inspect shape and the machinery underneath.
Install
Core + a DI adapter + a mock adapter (prerelease for now):
dotnet add package Mokkit --prerelease
dotnet add package Mokkit.Containers.Microsoft.Extensions.DependencyInjection --prerelease
dotnet add package Mokkit.Containers.NSubstitute --prerelease
Packages
| Package | Purpose |
|---|---|
Mokkit |
Core: Stage, Arrange/Act/Inspect, captures, the [MokkitCapture] source generator |
Mokkit.Containers.Microsoft.Extensions.DependencyInjection · .Autofac · .CastleWindsor |
DI container adapters |
Mokkit.Containers.Moq · .NSubstitute · .FakeItEasy |
Mock library adapters |
Mokkit.Containers.Bag |
Dependency-free "hold a few instances" container |
Documentation
Full guides, concepts and API reference: mokkit.net
- Introduction · Why Mokkit? (vs BDD/DSL) · Quickstart
- Building your test vocabulary — the idea Mokkit is built around
A worked, three-tier example (unit / integration / e2e) lives in example/Example1.
License
MIT © Nikita Ivanov
| 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. 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. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | 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 | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- No dependencies.
NuGet packages (8)
Showing the top 5 NuGet packages that depend on Mokkit:
| Package | Downloads |
|---|---|
|
Mokkit.Containers.Moq
Container wrapper of Moq for Mokkit. |
|
|
Mokkit.Containers.Microsoft.Extensions.DependencyInjection
Container wrapper of Microsoft.Extensions.DependencyInjection for Mokkit. |
|
|
Mokkit.Containers.Common
Shared building blocks for Mokkit mock-container packages — the framework-agnostic mock registration collection reused by the Moq, NSubstitute and FakeItEasy adapters. |
|
|
Mokkit.Containers.CastleWindsor
Container wrapper of Castle Windsor for Mokkit. |
|
|
Mokkit.Containers.FakeItEasy
Container wrapper of FakeItEasy for Mokkit. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.4.0 | 249 | 8/15/2026 |
| 0.3.0-preview.1.2 | 104 | 7/11/2026 |
| 0.3.0-preview.1 | 101 | 7/8/2026 |
| 0.2.3 | 375 | 6/23/2025 |
| 0.2.2 | 295 | 6/21/2025 |
| 0.2.1 | 172 | 6/20/2025 |
| 0.2.0 | 274 | 6/20/2025 |