Dotisan is a suite of small, focused NuGet packages for .NET developers, designed in the spirit of Sebastian Bergmann’s PHP ecosystem (PHPUnit + companions).
Instead of monolithic frameworks, Dotisan provides lego blocks — sharp, reusable utilities that work independently but shine when combined.
Mission:
Help .NET developers write faster, cleaner, and more reliable tests by filling the gaps left by existing frameworks.
- Small, composable packages – each solves one problem well.
- Ecosystem cohesion – common naming (Dotisan.*) and vision.
- Practical defaults – minimal boilerplate, usable out of the box.
- Transparency – no magic, just clean .NET code.
| Package | Type | Purpose | 
|---|---|---|
| Dotisan.Unit | Class Lib | Lightweight test runner (anchor project). | 
| Dotisan.Assert | Class Lib | Fluent, human-readable assertions. | 
| Dotisan.Reporter | Class Lib | Pluggable reporters (HTML, Markdown, JUnit). | 
| Package | Type | Purpose | 
|---|---|---|
| Dotisan.Coverage | Class Lib | Wrapper around Coverlet for simpler usage. | 
| Dotisan.CoverageReport | Tool | Istanbul-style HTML dashboards. | 
| Dotisan.CoverageGuard | Middleware | CI gate: block when coverage < threshold. | 
| Package | Type | Purpose | 
|---|---|---|
| Dotisan.Mock | SourceGen | Micro mocking framework with generated mocks. | 
| Dotisan.Stub | Class Lib | Helpers for fake/stub implementations. | 
| Dotisan.Faker | Class Lib | Lightweight fake data generator. | 
| Dotisan.Factory | SourceGen | Auto fixture / object factory generator. | 
| Package | Type | Purpose | 
|---|---|---|
| Dotisan.Timer | Class Lib | Measure test execution, report slowest cases. | 
| Dotisan.Sandbox | Class Lib | Ephemeral FS/DB/Redis for isolation. | 
| Dotisan.Parallel | Analyzer | Detect unsafe parallel tests. | 
| Dotisan.Retry | Class Lib | Retry flaky tests with backoff. | 
| Dotisan.Golden | Class Lib | Snapshot & golden master testing. | 
| Package | Type | Purpose | 
|---|---|---|
| Dotisan.HttpMock | Class Lib | Inline fake HTTP server. | 
| Dotisan.DbSnapshot | Tool | Capture & restore DB state for tests. | 
| Dotisan.EventReplay | Tool | Intercept & replay Kafka/RabbitMQ events. | 
| Dotisan.ApiContract | Template | Scaffold contract tests. | 
| Dotisan.FeatureToggle | Middleware | Run tests across feature-flag variations. | 
| Package | Type | Purpose | 
|---|---|---|
| Dotisan.Diff | Class Lib | Pretty diffs for JSON/XML/string comparisons. | 
| Dotisan.Trend | Tool | Historical test trend dashboard. | 
| Dotisan.Artifacts | Class Lib | Auto-collect logs/screenshots on fail. | 
| Dotisan.Slack | Tool | Push reports to Slack/Teams. | 
| Dotisan.History | Tool | Track test flakiness across builds. | 
| Package | Type | Purpose | 
|---|---|---|
| Dotisan.Templates | Template | Bundle of dotnet newtemplates: unit, contract, integration. | 
Usage:
dotnet new install Dotisan.Templates
dotnet new dotisan-contract -n MyContractTests| Package | Type | Purpose | 
|---|---|---|
| Dotisan.All | Meta | Convenience package that pulls in core Dotisan libs (Assert, Timer, Diff, Coverage). | 
- Class Lib NuGet → reusable logic (assertions, helpers, wrappers).
- Analyzer/Source Generator → compile-time diagnostics & code-gen.
- Middleware → ASP.NET Core pipeline components.
- Tool (dotnet tool) → CLI utilities (reporters, dashboards, snapshots).
- Template → scaffolding via dotnet new.
- Meta → empty NuGet that references multiple Dotisan packages.
Example: install and use Dotisan.Assert
dotnet add package Dotisan.Assertusing Dotisan.Assert;
"Rudi".ShouldBe("Rudi", because: "names must match");- Phase 1 (MVP) – Build small, sharp utilities:
- Dotisan.Assert,- Dotisan.Timer,- Dotisan.Diff,- Dotisan.Coverage
 
- Phase 2 – Add ecosystem support:
- Dotisan.Unit,- Dotisan.Reporter,- Dotisan.CoverageGuard,- Dotisan.Mock
 
- Phase 3 – Round out integrations & tooling:
- Dotisan.HttpMock,- Dotisan.Trend,- Dotisan.Slack,- Dotisan.Templates
 
MIT – free to use, extend, and share.
Contributions welcome! Start small:
- Suggest new Dotisan packages.
- Improve docs or add samples.
- Submit bugfixes or new assertion extensions.
- Cohesive ecosystem.
- Built “for .NET devs, by .NET devs.”
- Fills the missing middle between heavy frameworks and DIY utilities.
- Inspired by the legendary Sebastian Bergmann PHP stack.
Dotisan = Crafted Tools for .NET Developers.