Built on affaan-m/ECC by @affaan-m (256,294 stars, MIT). All credit for the original idea to them. This fork improves and repackages it; upstream license preserved in UPSTREAM_LICENSE.
A Claude Code skill that helps F# developers write clear, safe tests with xUnit, FsUnit, Unquote, FsCheck, and .NET test tools.
Built for F# developers who want better unit, async, property, and ASP.NET Core tests. It fits into your current Claude Code flow.
F# tests can fail for reasons that are hard to spot.
Files may be in the wrong build order. Async tests may block. Shared data may make tests flaky. Weak checks may hide the real error.
This skill gives Claude Code a small set of practical rules for writing tests that are easy to read and trust.
Replace OWNER with the GitHub account that hosts this repo, then run one command:
mkdir -p ~/.claude/skills/fsharp-testing && curl -fsSL https://raw.githubusercontent.com/OWNER/fsharp-test-kit-plus/main/skill/SKILL.md -o ~/.claude/skills/fsharp-testing/SKILL.mdNo build step is needed.
Ask Claude Code for a test in plain words:
Use the fsharp-testing skill to add xUnit tests for ValidatedEmail.create.
Check the exact errors for an empty value and a bad email.
Expected output:
module ValidatedEmailTests
open Xunit
open Swensen.Unquote
[<Fact>]
let ``empty email gives EmailIsEmpty`` () =
let result = ValidatedEmail.create ""
test <@ result = Error EmailIsEmpty @>Claude should also place F# helper files before test files in the project file. It should use fresh test data and check the exact Result value when that value matters.
- Replaced the Japanese metadata description with a clearer English summary of the skill’s scope and tools.
- Expanded activation guidance to explicitly cover async code and ASP.NET Core testing.
- Added practical test-project setup commands, package installation steps, and F# file-order guidance.
- Strengthened testing advice around minimal dependencies, isolated test data, exact
Resultassertions, and observable behavior. - Improved async guidance with cancellation testing and warnings against
.Result,.Wait(), andThread.Sleep.
This project uses the MIT License. The original upstream license is preserved in UPSTREAM_LICENSE.
