fsharp-testing

fsharp-testing is a skill for Claude Code, Codex from gongyijie85/dsh-ecc. It costs 53 tokens per session (1,952 once invoked), scanned A, a copy of fsharp-testing, MIT.

A set of F# testing patterns using xUnit and F#-focused assertion tools. It also covers property-based testing, which checks rules against many generated inputs, plus integration tests that use real services.

In plain words
What is it for?
Use it when writing or reviewing F# tests, setting up test infrastructure, checking application properties, mocking dependencies, or testing ASP.NET Core integrations.
Why use it?
It helps developers choose a consistent test structure and diagnose weak, slow, or unreliable tests. It also explains how to test F# code and .NET application integrations.

Skill for Claude CodeCodex

Written for no agent in particular: nothing here depends on one.

Good fit Use it when writing or reviewing F# tests, setting up test infrastructure, checking application properties, mocking dependencies, or testing ASP.NET Core integrations.

Compare 6 skills from other repositories ↓
Install with agentmods
npx agentmods add skills/gongyijie85/dsh-ecc/fsharp-testing
Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

Any agent
npx skills add gongyijie85/dsh-ecc --skill fsharp-testing
Clone the repo
git clone --depth 1 https://github.com/gongyijie85/dsh-ecc

Made for: Claude Code, Codex.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for fsharp-testing

README.md
[![agentmods](https://agentmods.dev/badge/skills/gongyijie85/dsh-ecc/fsharp-testing.svg)](https://agentmods.dev/skills/gongyijie85/dsh-ecc/fsharp-testing)
Your own site
<a href="https://agentmods.dev/skills/gongyijie85/dsh-ecc/fsharp-testing"><img src="https://agentmods.dev/badge/skills/gongyijie85/dsh-ecc/fsharp-testing.svg" alt="Measured on agentmods" height="20"></a>
Per session 53 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 1,952 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin 92% copy Near-identical to another mod in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00053 $0.01952
Opus 5 $0.00026 $0.00976
Sonnet 5 $0.00011 $0.00390
Haiku 4.5 $0.00005 $0.00195

Measured 3d ago against content hash d89f8cb5235f, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-07, from the pricing page.

Security

Grade A, and why

fsharp-testing scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 3d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

Origin

This is a copy

92% identical to fsharp-testing — 2 lines differ, which has more behind it and is treated as the original. This page carries a canonical link to it rather than competing with it.

skills/fsharp-testing/SKILL.md · 282 lines

How it starts

The opening of the file, as written. The whole thing — 282 lines — stays where its author put it; the contents beside it link to each section on GitHub.

F# Testing Patterns

Comprehensive testing patterns for F# applications using xUnit, FsUnit, Unquote, FsCheck, and modern .NET testing practices.

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

Test Framework Stack

Tool Purpose
xUnit Test framework (standard .NET ecosystem choice)
FsUnit.xUnit F#-friendly assertion syntax for xUnit
Unquote Assertion library using F# quotations for clear failure messages
FsCheck.xUnit Property-based testing integrated with xUnit
NSubstitute Mocking .NET dependencies
Testcontainers Real infrastructure in integration tests
WebApplicationFactory ASP.NET Core integration tests

Unit Tests with xUnit + FsUnit

Basic Test Structure

module OrderServiceTests

open Xunit
open FsUnit.Xunit

[<Fact>]
let ``create sets status to Pending`` () =
    let order = Order.create "cust-1" [ validItem ]
    order.Status |> should equal Pending

[<Fact>]
let ``confirm changes status to Confirmed`` () =
    let order = Order.create "cust-1" [ validItem ]
    let confirmed = Order.confirm order
    confirmed.Status |> should be (ofCase <@ Confirmed @>)

Assertions with Unquote

Unquote uses F# quotations so failure messages show the full expression that failed, not just "expected X got Y".

module OrderValidationTests

open Xunit
open Swensen.Unquote

[<Fact>]
let ``PlaceOrder returns success when request is valid`` () =
    let request = { CustomerId = "cust-123"; Items = [ validItem ] }
    let result = OrderService.placeOrder request
    test <@ Result.isOk result @>

[<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 @>

[<Fact>]
let ``validated email rejects empty input`` () =
    let result = ValidatedEmail.create ""
    test <@ Result.isError result @>

Read the full file on GitHub · 282 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 3d ago First seen · 282 lines · 53 tokens per session scan A d89f8cb5235f

Subscribe to this mod's changes

fsharp-testing is a skill published in the GitHub repository gongyijie85/dsh-ecc (6 stars, last pushed 3d ago), licensed MIT. It adds 53 tokens to every session and 1,952 once invoked, about $0.0003 per session on Opus 5. A static security scan graded it A with 0 findings. It is 92% identical to fsharp-testing, differing in 2 lines, and is treated as a copy.