Skip to content
Back to skills

Fsharp Testing

ASecurity

Use when f# testing patterns with xUnit, FsUnit, Unquote, FsCheck property-based testing, integration tests, and test organization best practices. Only for F# — not for other languages. Triggers on \"fsharp-testing\", \"fsharp testing\", \"testing\".

  • 2 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added September 19, 2026
ai-agentsexpresstestingdebugging

Security analysis

A100/100

Pro scans all 4 files and shows the line behind each finding

Scanned September 19, 2026

npx -y skills add majinmagros/magros.ai-skills --skill fsharp-testing --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Fsharp Testing?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Fsharp Testing
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/majinmagros-fsharp-testing/badge)](https://www.skillsdirectory.com/skills/majinmagros-fsharp-testing)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: fsharp-testing
description: "Use when f# testing patterns with xUnit, FsUnit, Unquote, FsCheck property-based testing, integration tests, and test organization best practices. Only for F# — not for other languages. Triggers on \"fsharp-testing\", \"fsharp testing\", \"testing\"."
metadata:
  origin: ECC
---

# F# Testing Patterns

Testing patterns for F# apps using xUnit, FsUnit, Unquote, FsCheck, and modern .NET practices. Detalhes em `references/`.

## When to Activate

- Writing new tests for F# code
- Reviewing test quality and coverage
- Setting up test infrastructure for F# projects
- Debugging flaky or slow tests

## Core Principles

1. **Unquote for assertions** — quotations show the full failed expression
2. **FsCheck for invariants** — totals, roundtrips, validation rules
3. **Function stubs first** — NSubstitute only for .NET interfaces
4. **Fresh state per test** — never mutable shared fixtures
5. **Test behavior, not internals** — typed values and pattern matches

## Example

```fsharp
[<Fact>]
let ``order total sums item prices`` () =
    let items = [ { Sku = "A"; Quantity = 2; Price = 10m }
                  { Sku = "B"; Quantity = 1; Price = 5m } ]
    let total = Order.calculateTotal items
    test <@ total = 25m @>
```

## References

- `references/unit-tests.md` — stack table, xUnit+FsUnit, Unquote, async, Theory
- `references/property-tests.md` — FsCheck.xUnit, custom generators
- `references/mocking-integration.md` — stubs, NSubstitute, WebApplicationFactory, layout, anti-patterns, `dotnet test`, related skills

## Checklist

- [ ] Unquote `test <@ ... @>` instead of bare asserts
- [ ] FsCheck properties for functions with clear invariants
- [ ] Async tests use `task { }`, no `Thread.Sleep`
- [ ] `CancellationToken` passed and verified
- [ ] Unit/Integration/Properties split under `tests/`

Files in this skill

  • SKILL.md1.8 KB
  • references/mocking-integration.md3.2 KB
  • references/property-tests.md1.1 KB
  • references/unit-tests.md2.9 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…