Agent skill
test
Use when writing tests, enforcing TDD (RED-GREEN-REFACTOR), analyzing coverage gaps, or planning test strategy. Supports Python, TypeScript, .NET, Rust, Go.
Install this agent skill to your Project
npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/other/other/test-arcasilesgroup-ai-engineering
SKILL.md
Test
Purpose
TDD enforcement and testing skill. Tests are executable specifications -- they define what the system does before the system does it. Maximum confidence per minute of developer time.
When to Use
tdd: driving new features test-first (RED-GREEN-REFACTOR)run: writing and executing tests for existing codegap: analyzing coverage gaps and missing edge casesplan: designing test strategy before writing tests
Process
Mode: tdd (RED-GREEN-REFACTOR)
NO PRODUCTION CODE WITHOUT A FAILING TEST FIRST
Phase RED -- Write Failing Test
- Write ONE test showing what SHOULD happen
- Name:
test_<unit>_<scenario>_<expected_outcome> - AAA pattern: Arrange, Act, Assert (visually separated)
- Run test -- confirm FAIL for the expected reason (missing feature, not syntax error)
- Produce Implementation Contract:
## Implementation Contract
- Test files: [exact paths]
- Verification: [exact command]
- Failure reason: [why it fails -- tied to missing behavior]
- Constraint: DO NOT modify these test files during GREEN
- STOP. Do not implement.
Phase GREEN -- Minimal Code
- Read the Implementation Contract
- DO NOT modify test files (they are immutable)
- Write the simplest code to make the test pass (YAGNI)
- Run test -- confirm PASS
- Run ALL tests -- confirm no regressions
If the test still fails: fix your code, not the test.
Phase REFACTOR -- Clean Up (after GREEN only)
- Remove duplication, improve names, extract helpers
- Tests MUST stay green throughout
- Do NOT add behavior during refactor
Mode: run
- Detect test framework from project files
- Follow existing conventions (directory structure, naming, fixtures)
- Write tests using AAA pattern with descriptive names
- Run with stack-appropriate command
- Report results: pass/fail count, coverage delta
Mode: gap
- Run coverage tool with branch coverage enabled
- Identify untested critical paths (business logic > glue code)
- Check for missing edge cases: null, empty, boundary, error paths
- Produce gap report with prioritized recommendations
Mode: plan
- Map the testing surface (modules, public APIs, critical paths)
- Assign test categories: unit, integration, e2e
- Define coverage targets per module
- Identify infrastructure needs (test containers, fixtures, fakes)
Stack Commands
| Stack | Runner | Coverage | Async |
|---|---|---|---|
| Python | uv run pytest |
pytest-cov (branch=true) |
asyncio_mode = "auto" |
| TypeScript | vitest or jest |
c8 / istanbul |
async/await |
| .NET | dotnet test + xUnit |
coverlet |
async Task |
| Rust | cargo test |
cargo tarpaulin |
#[tokio::test] |
| Go | go test ./... |
go test -cover |
goroutine tests |
Testing Rules
Fakes over mocks. Mocks test implementation details. Fakes implement the same interface.
Mocks are acceptable ONLY for:
- Verifying something was NOT called
- Simulating transient errors for retry logic
- Third-party libraries (but wrap in your own adapter first)
AAA pattern (non-negotiable):
# Arrange -- set up inputs and dependencies
# Act -- call the function under test
# Assert -- verify the outcome
Name pattern: test_<unit>_<scenario>_<expected_outcome>
- Good:
test_parse_email_rejects_missing_at_symbol - Bad:
test_parse_email,test_1,test_it_works
Anti-Patterns (Reject These)
| Anti-Pattern | Why It Fails |
|---|---|
| Testing the mock | Proves the mock works, not the code |
| No-op test (assert True) | Tests nothing, inflates coverage |
| Testing implementation | Breaks on refactor, proves nothing about behavior |
| Huge test setup | Design is too coupled -- simplify the interface |
| sleep() for sync | Flaky -- use events, barriers, wait_for |
| Exact float comparison | Flaky -- use approx/closeTo |
Iron Law
If tests are wrong, escalate to the user. NEVER weaken, skip, or modify tests to make implementation easier. "Tests are wrong" means the requirement changed -- not that passing them is hard.
Common Mistakes
- Writing tests after implementation (tests-after prove what IS, not what SHOULD be)
- Testing private methods (test the public API)
- 100% coverage with meaningless assertions
- Skipping edge cases (null, empty, boundary, concurrent access)
- Not running ALL tests after changes
Integration
- Called by:
/ai-dispatch(build tasks),ai-build agent(TDD mode), user directly - Calls: stack-specific test runners
- Transitions to:
ai-build(GREEN phase),/ai-verify(coverage validation)
$ARGUMENTS
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
agent-ops-spec
Manage specification documents in .agent/specs/. Use when user provides requirements, acceptance criteria, or feature descriptions that need to be tracked and validated against implementation.
agent-ops-state
Maintain .agent state files. Use at session start, after meaningful steps, and before concluding: read/update constitution/memory/focus/issues/baseline consistently.
agent-ops-spec
Manage specification documents in .agent/specs/. Use when user provides requirements, acceptance criteria, or feature descriptions that need to be tracked and validated against implementation.
agent-ops-testing
Test strategy, execution, and coverage analysis. Use when designing tests, running test suites, or analyzing test results beyond baseline checks.
agent-ops-testing
Test strategy, execution, and coverage analysis. Use when designing tests, running test suites, or analyzing test results beyond baseline checks.
agent-ops-state
Maintain .agent state files. Use at session start, after meaningful steps, and before concluding: read/update constitution/memory/focus/issues/baseline consistently.
Didn't find tool you were looking for?