Conjecture.FSharp.Expecto
0.18.0
See the version list below for details.
dotnet add package Conjecture.FSharp.Expecto --version 0.18.0
NuGet\Install-Package Conjecture.FSharp.Expecto -Version 0.18.0
<PackageReference Include="Conjecture.FSharp.Expecto" Version="0.18.0" />
<PackageVersion Include="Conjecture.FSharp.Expecto" Version="0.18.0" />
<PackageReference Include="Conjecture.FSharp.Expecto" />
paket add Conjecture.FSharp.Expecto --version 0.18.0
#r "nuget: Conjecture.FSharp.Expecto, 0.18.0"
#:package Conjecture.FSharp.Expecto@0.18.0
#addin nuget:?package=Conjecture.FSharp.Expecto&version=0.18.0
#tool nuget:?package=Conjecture.FSharp.Expecto&version=0.18.0
Conjecture.NET
Property-based testing for .NET — a ground-up port of Python's Hypothesis.
What is it?
Write tests that describe what your code should do, and let Conjecture generate hundreds of random inputs to find the edge cases you'd never think of. When it finds a failure, it automatically shrinks the input to the smallest possible counterexample — no hand-written cases required.
Install
Pick the adapter for your test framework:
dotnet add package Conjecture.Xunit # xUnit v2
dotnet add package Conjecture.Xunit.V3 # xUnit v3
dotnet add package Conjecture.NUnit # NUnit
dotnet add package Conjecture.MSTest # MSTest
Quick Example
using Conjecture.Xunit;
public class SortTests
{
[Property]
public bool Sorting_is_idempotent(List<int> items)
{
var sorted = items.OrderBy(x => x).ToList();
var sortedTwice = sorted.OrderBy(x => x).ToList();
return sorted.SequenceEqual(sortedTwice);
}
}
Run with dotnet test. Conjecture generates random lists, runs the property 100 times, and if it fails, shrinks the input to the minimal failing case.
Features
- Automatic test generation — generates random inputs from type-aware strategies
- Intelligent shrinking — finds the smallest failing input via byte-stream minimization
- LINQ composition — build complex strategies with
Select,Where,SelectMany - All major frameworks — xUnit v2, xUnit v3, NUnit, MSTest
- Source generators — derive strategies for your types with
[Arbitrary] - Roslyn analyzers — catch common mistakes at compile time
- Stateful testing — model systems as state machines and explore command sequences
- Targeted testing — steer generation toward extremes with
Target.Maximize/Target.Minimize - Recursive strategies — generate bounded-depth trees and self-referential types
- Example database — persist failing inputs for automatic regression prevention
- Structured logging — structured events for generation, shrinking, and targeting phases
Documentation
Full documentation is at ommundsen.dev/Conjecture:
- Quick Start — write your first property test in 5 minutes
- Tutorials — learn property-based testing step by step
- API Reference — auto-generated from source
- Porting Guide — coming from Python Hypothesis?
- Changelog
Credit
This project is an attempt at a .NET port of Hypothesis for Python. The concept of this project builds on and would not be possible without the work of David R. MacIver and Zac Hatfield-Dodds, as well as the many other authors of the Hypothesis project.
License
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. 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. |
-
net10.0
- Conjecture.FSharp (>= 0.18.0)
- Expecto (>= 10.2.3)
- FSharp.Core (>= 10.1.201)
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 |
|---|---|---|
| 0.29.0 | 116 | 5/9/2026 |
| 0.28.0 | 110 | 5/9/2026 |
| 0.27.1 | 122 | 4/28/2026 |
| 0.26.0 | 108 | 4/27/2026 |
| 0.25.0 | 111 | 4/27/2026 |
| 0.24.0 | 106 | 4/26/2026 |
| 0.23.0 | 110 | 4/26/2026 |
| 0.22.0 | 115 | 4/26/2026 |
| 0.21.0 | 114 | 4/26/2026 |
| 0.20.0 | 120 | 4/25/2026 |
| 0.19.0 | 112 | 4/25/2026 |
| 0.18.0 | 108 | 4/23/2026 |
| 0.17.0 | 126 | 4/23/2026 |
| 0.16.0 | 119 | 4/22/2026 |
| 0.15.0 | 107 | 4/22/2026 |
| 0.14.0 | 118 | 4/21/2026 |
| 0.13.0 | 116 | 4/19/2026 |
| 0.12.0 | 112 | 4/19/2026 |