An advanced, smooth testing library for F# with parallel execution, property-based testing, and performance benchmarking.
Expecto is an advanced testing library for F# designed to make testing CLR-based software easy and efficient. It supports unit tests, stress tests, regression tests, and property-based tests, with a focus on parallelism and async by default to maximize CPU utilization during testing. It treats tests as first-class values, enabling flexible composition and manipulation.
F# developers building CLR-based software who need a comprehensive, parallelizable testing framework with support for various test types including property-based and performance testing.
Developers choose Expecto for its default parallelism and async support, which maximizes CPU usage and helps catch threading and memory issues, and for its compositional model that treats tests as values, offering greater flexibility and control over test execution.
A smooth testing lib for F#. APIs made for humans! Strong testing methodologies for everyone!
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Tests run concurrently to maximize CPU utilization, which helps catch threading and memory issues early, as highlighted in the stress testing features.
Tests are composable and filterable values, enabling flexible test suites without reliance on attributes, as demonstrated in the testList and filtering examples.
Provides a simple API for property-based tests using FsCheck, allowing for robust validation of invariants with minimal boilerplate.
Includes tools like Expect.isFasterThan for performance comparisons using Welch's t-test, making it easy to benchmark code changes accurately.
Default parallelism requires careful avoidance of global state and unsafe logging (e.g., printfn), which can lead to interleaved output or flaky tests if not managed.
Major versions like 11.0.0 introduce breaking changes, such as FsCheck 3 migration and adapter incompatibilities, complicating upgrades for existing projects.
The functional, compositional model differs from mainstream attribute-based frameworks, requiring a shift in mindset for developers new to F# or functional testing.