Borrowing it
Nothing to install: this file belongs to kamiazya/whiteboard. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/kamiazya/whiteboard/main/.claude/skills/testing-techniques/SKILL.mdgit clone --depth 1 https://github.com/kamiazya/whiteboardWrote 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.
[](https://agentmods.dev/skills/kamiazya/whiteboard/testing-techniques)<a href="https://agentmods.dev/skills/kamiazya/whiteboard/testing-techniques"><img src="https://agentmods.dev/badge/skills/kamiazya/whiteboard/testing-techniques.svg" alt="Measured on agentmods" height="20"></a>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.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00213 | $0.01894 |
| Opus 5 | $0.00106 | $0.00947 |
| Sonnet 5 | $0.00043 | $0.00379 |
| Haiku 4.5 | $0.00021 | $0.00189 |
Grade A, and why
testing-techniques 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 today.
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.
How it starts
The opening of the file, as written. The whole thing — 97 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Testing techniques (whiteboard)
test-layer-selection answers where a test goes. This skill answers how to write one
that stays green and how to know it asserts something. The body here is an index; the
detail is in resources/*.md, opened one at a time for the situation at hand — never all at
once.
The rung ladder
Every technique here sits on a rung, and the rung is chosen by what would actually catch the mistake — strongest first:
| Rung | Catches the mistake… | This repo's instruments |
|---|---|---|
| executable | at lint / typecheck / test time, mechanically | tools/biome-plugins/test-flake-shapes.grit (rules read from the file by its guard), tools/arch-lint's test scans (lazy imports, duplicate titles, the sleep ledger), guard tests (browser-test-name-length, vitest-data-dir, local-node-version) |
| setup guard | at runtime, for every test in a project | apps/web/vitest.setup.ts (cleanup, fake-timer leak, localStorage), browser-setup.ts (stylesheet, async budget), sharedBrowserTestConfig (trace bounds) |
| review criteria | when a reviewer reads the diff | review-gate/resources/test-coverage.md |
| prose | only if someone remembers | integrator-flow.md's CI-flakes section (the measurements), this skill |
A shape that costs a real defect twice earns a higher rung. How to move one up is
resources/executable-rungs.md.
The resources describe the INSTALLED vitest — the vitest: line of pnpm-workspace.yaml's
catalog (5.0.0 since 2026-09-05). A config key the installed version does not know is
ignored silently, so check the version before relying on one. Features newer than a
reader's training carry their API and a snippet, beside the situation each serves — never
in a file named after a version, which only a reader who already knows the feature opens.
Open the resource for the situation
| Situation | Resource |
|---|---|
| naming a test or a file, a duplicate title, a fixed sleep, a count or ordinal in a title | resources/naming-and-structure.md |
async assertions, expect.poll, waitFor, fake timers, clocks, scheduler teardown |
resources/async-and-timers.md |
a .browser.test.tsx: focus, typing, locators, timeouts, titles, traces |
resources/browser-mode.md |
mocks, module state, storage, data dirs, workers, --project filters |
resources/isolation-and-state.md |
| a property test, a Stryker survivor, a generator that reaches nothing, a coverage ledger | resources/property-and-mutation.md |
| "is this test stable?" — repeats, stress, isolation vs full run, quarantine, flake-watch | resources/stability-checks.md |
| adding a GritQL shape, a setup-file guard, or a source-scan test | resources/executable-rungs.md |
projects and filters, pools and caches, .vitest/ artifacts and reporters, benchmarks, custom matchers, coverage — and the four tempting options measured and REFUTED here |
resources/configuration.md |
| moving to a new vitest major: breaking changes measured against this tree, and the order to land them | resources/vitest-upgrade.md |
What ships with it
9 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
- resources/async-and-timers.md 5.2 KB
- resources/browser-mode.md 12 KB
- resources/configuration.md 23 KB
- resources/executable-rungs.md 8.8 KB
- resources/isolation-and-state.md 8.1 KB
- resources/naming-and-structure.md 5.5 KB
- resources/property-and-mutation.md 5.5 KB
- resources/stability-checks.md 4.4 KB
- resources/vitest-upgrade.md 4.4 KB
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.
- today First seen · 97 lines · 0 tokens per session scan A af5af12672b1
testing-techniques is a skill published in the GitHub repository kamiazya/whiteboard (6 stars, last pushed today), licensed Apache-2.0. It adds 213 tokens to every session and 1,894 once invoked, about $0.0011 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-06.
Other skills, from other repositories
migrate-xunit-to-xunit-v3
Migrate .NET test projects from xUnit.net v2 to xunit.v3 and fix v3 breaks. Use for package/CPM conversion, OutputType=Exe, preserving the VSTest or MTP runner (including projects currently using YTest.MTP.XUnit2), incompatible TFMs, async void tests, string-to-Type attributes, custom Fact/Theory/BeforeAfterTest…
go-testing
Trigger: Go tests, go test coverage, Bubbletea teatest, golden files. Apply focused Go testing patterns.
nw-fp-clojure
Clojure language-specific patterns, data-first modeling, REPL-driven development, and spec.
restore-internals-seams-in-finally-blocks-after-each-test
When delegating a task affected by this skill, include.
mobiai-ios-testing
Use when writing or running tests in an iOS project — unit tests, UI tests, snapshot tests, choosing the right framework.
testing-llm
LLM and AI testing patterns — mock responses, evaluation with DeepEval/RAGAS, structured output validation, and agentic test patterns (generator, healer, planner). Use when testing AI features, validating LLM outputs, or building evaluation pipelines.