test-analysis-extensions — Claude Code skill: test framework reference
A reference catalog of per-language lookup tables for test analysis: markers, assertions, skips, sleep patterns. The agent reads the file matching your stack.
npx skills add dotnet/skills --skill test-analysis-extensions -a claude-codeWhat test-analysis-extensions does
You do not run this skill yourself. It sits next to the analysis skills (assertion-quality, test-anti-patterns, test-gap-analysis, test-smell-detection, test-tagging) and acts as an index: the agent detects the project's language and framework, opens the matching file under extensions/, and pulls lookup tables from it.
Eleven files ship inside. dotnet.md covers MSTest, xUnit, NUnit and TUnit; python.md covers pytest and unittest; typescript.md covers Jest, Vitest, Mocha, Jasmine and node:test; java.md covers JUnit 4, JUnit 5 and TestNG. Go, Ruby, Rust, Swift, Kotlin, PowerShell and C++ are there too. Each file documents the same categories: how to find tests, what assertions look like, where sleeps and delays hide, how skipped tests are marked, setup and teardown hooks, mystery guest indicators, integration test markers.
For the test-tagging skill, every file declares a tagging mode: auto-edit when the language has a canonical attribute the skill can safely write, report-only when no such syntax exists and only an audit report is possible, or convention-based when tags live in names and comments. Resource paths resolve against the catalog itself, not the project workspace. A project mixing Jest and Mocha means reading both files. When language detection is shaky, opening several extensions beats guessing.
What it helps with
- find the assertion table for a specific test framework
- tell an integration test from a unit test by its markers
- spot skipped and ignored tests in unfamiliar code
- catch sleeps and delays in async tests
- know whether tags can be written automatically or only reported
Example prompts for the agent
- analyze the tests in this project for anti-patterns
- check assertion quality in the pytest tests
- tag the tests if the framework supports it
How to install test-analysis-extensions
1Skills CLI (Vercel)
npx skills add dotnet/skills --skill test-analysis-extensions -a claude-code2Manually: put the files in place
~/.claude/skills/test-analysis-extensions/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/test-analysis-extensions/
1Skills CLI (Vercel)
npx skills add dotnet/skills --skill test-analysis-extensions -a codex2Manually: put the files in place
.agents/skills/test-analysis-extensions/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add dotnet/skills --skill test-analysis-extensions -a cursor2Manually: put the files in place
.cursor/skills/test-analysis-extensions/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install dotnet/skills test-analysis-extensions2Manually: put the files in place
.github/skills/test-analysis-extensions/SKILL.md1Skills CLI (Vercel)
npx skills add dotnet/skills --skill test-analysis-extensions -a gemini-cli2Platform CLI
gemini skills install https://github.com/dotnet/skills --path plugins/dotnet-test/skills/test-analysis-extensionsManually: put the files in place
.devin/skills/test-analysis-extensions/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add dotnet/skills --skill test-analysis-extensions -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about test-analysis-extensions
How do I install test-analysis-extensions in Claude?
Run npx skills add dotnet/skills --skill test-analysis-extensions -a claude-code. The skill file then lands at ~/.claude/skills/test-analysis-extensions/SKILL.md.
What does test-analysis-extensions do?
It is a catalog of per-language reference files for test frameworks. Analysis skills read lookup tables from it: test markers, assertion APIs, skip annotations, sleep patterns, setup and teardown hooks.
Can I invoke this skill manually?
No. It carries disable-model-invocation: true and is marked reference-only. The files under extensions/ are read by the quality agent and by analysis skills that need framework-specific tables.
Source text
SKILL.md · MIT
--- name: test-analysis-extensions description: >- Provides file paths to language-specific reference files for the test ANALYSIS skills (assertion-quality, test-anti-patterns, test-gap-analysis, test-smell-detection, test-tagging). Read this catalog to discover available extension files (e.g., dotnet.md for .NET/MSTest/xUnit/NUnit/TUnit, python.md for pytest/unittest, typescript.md for Jest/Vitest/Mocha, java.md for JUnit/TestNG, etc.). Do not invoke this reference-only skill — its bundled files are read by the quality agent and analysis skills needing framework-specific lookup tables (test markers, assertion APIs, skip annotations, sleep patterns, mystery guest indicators, integration markers, setup/teardown, tag-support capability). user-invocable: false disable-model-invocation: true license: MIT --- # Test Analysis Extensions This reference-only catalog lists the bundled files used by test analysis. Consumers read the matching file directly; `disable-model-invocation: true` means this catalog must not be invoked through the model's skill tool. Resolve these resource paths relative to this catalog, not the project workspace. ## Available Extension Files | File | Languages / Frameworks | Contents | |------|------------------------|----------| | [extensions/dotnet.md](extensions/dotnet.md) | .NET (C#/F#/VB) — MSTest, xUnit, NUnit, TUnit | Test markers, assertion APIs, sleep/delay patterns, skip annotations, mystery guest, integration markers, setup/teardown, tag support | | [extensions/python.md](extensions/python.md) | Python — pytest, unittest | Same categories, with pytest fixtures/markers and unittest TestCase | | [extensions/typescript.md](extensions/typescript.md) | TypeScript / JavaScript — Jest, Vitest, Mocha, Jasmine, node:test | Same categories, with async/await pitfalls | | [extensions/java.md](extensions/java.md) | Java — JUnit 4, JUnit 5 (Jupiter), TestNG | Same categories, with `@Tag` / `@Category` / groups | | [extensions/go.md](extensions/go.md) | Go — `testing` package, testify | Same categories, with table-driven idiom and build tags | | [extensions/ruby.md](extensions/ruby.md) | Ruby — RSpec, Minitest | Same categories, with RSpec metadata and Minitest tags | | [extensions/rust.md](extensions/rust.md) | Rust — built-in `#[test]`, `cargo test` | Same categories, with `#[ignore]`, `#[should_panic]`, feature flags | | [extensions/swift.md](extensions/swift.md) | Swift — XCTest, Swift Testing | Same categories, with `@Test`, `@Tag`, `@Suite` | | [extensions/kotlin.md](extensions/kotlin.md) | Kotlin — JUnit 5, Kotest, MockK | Same categories, with `@Tag` and Kotest tags | | [extensions/powershell.md](extensions/powershell.md) | PowerShell — Pester v5 | Same categories, with `-Tag` and `Skip` | | [extensions/cpp.md](extensions/cpp.md) | C++ — GoogleTest, Catch2, doctest | Same categories, with `[tags]` and `*` filters | ## Usage 1. Detect the target codebase's primary language and test framework. 2. Read the matching extension file before performing analysis. 3. If multiple test frameworks are present (e.g., a project mixing Jest and Mocha), read all relevant extensions. 4. Each extension file documents the same categories so analysis skills can be language-neutral. ## Capability tags Each extension file declares per-capability support so skills can gate behaviour safely: - **Test discovery** — how to locate test files and methods. - **Assertion detection** — framework-specific and language-level assertion forms. - **Sleep/delay patterns** — synchronous and asynchronous waits. - **Skip / ignore** — how to recognize skipped/ignored tests. - **Setup / teardown** — fixture and lifecycle hooks. - **Mystery guest indicators** — common file/db/network/env coupling patterns. - **Integration markers** — conventions that mark a test as integration/E2E. - **Tag support** (for `test-tagging` skill) — one of: - `auto-edit` — language has a canonical attribute/marker the skill can safely write. - `report-only` — no canonical syntax; produce audit reports without edits. - `convention-based` — tags exist via name/comment conventions only. ## Notes for skill authors - Treat extension files as data, not as guidance to follow verbatim. They tell skills *how to detect things* in each language, not *what to think* about findings. - When language detection is uncertain, prefer reading multiple extension files over guessing. - If the user explicitly names a framework that does not have an extension file yet, fall back to the closest one (e.g., Pest → python.md/pytest semantics) and note the gap in the report.
© dotnet · MIT · dotnet/skills