Implements TDD workflows for Rust to ensure code quality through rigorous testing.

Install

mkdir -p .claude/skills/rtco-tdd && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/12280" && unzip -o skill.zip -d .claude/skills/rtco-tdd && rm skill.zip

Installs to .claude/skills/rtco-tdd

Activation

This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.

Enforces TDD (Red-Green-Refactor) for Rust development. Auto-triggers on implementation, testing, refactoring, and bug fixing tasks. Provides Rust-idiomatic testing patterns with anyhow/thiserror, cfg(test), and Arrange-Act-Assert workflow.
240 charsno explicit “when” trigger
Intermediate

Key capabilities

  • Write failing tests before production code
  • Implement minimum production code to pass tests
  • Refactor code while maintaining passing tests
  • Apply Arrange-Act-Assert pattern for tests
  • Use `#[cfg(test)]` for Rust test modules

How it works

The skill enforces the Red-Green-Refactor cycle for Rust development. It mandates writing a failing test, then minimal production code to make the test pass, followed by refactoring while ensuring tests remain green. It also specifies idiomatic Rust test patterns.

Inputs & outputs

You give it
Rust code development tasks (implementation, testing, refactoring, bug fixing)
You get back
Well-tested Rust code following TDD principles

When to use rtco-tdd

  • Writing test-first rust code
  • Refactoring rust modules
  • Enforcing red-green-refactor workflow

About this skill

Rust TDD Workflow

Three Laws of TDD

  1. Do NOT write production code without a failing test
  2. Write only enough test to fail (including compilation failure)
  3. Write only enough production code to pass the failing test

Cycle: RED (test fails) -> GREEN (minimum to pass) -> REFACTOR (cleanup, cargo test)

Red-Green-Refactor Steps

1. Write test in #[cfg(test)] mod tests of the SAME file
2. cargo test MODULE::tests::test_name  -- must FAIL (red)
3. Implement the minimum in the function
4. cargo test MODULE::tests::test_name  -- must PASS (green)
5. Refactor if needed, re-run cargo test (still green)
6. cargo fmt && cargo clippy --all-targets && cargo test  (final gate)

Never skip step 2. If the test passes immediately, it tests nothing.

Idiomatic Rust Test Patterns

PatternUsageWhen
Arrange-Act-AssertBase structure for every testAlways
assert_eq! / assert!Direct comparison / booleansDeterministic values
assert!(result.is_err())Error path testingInvalid inputs
Result<()> return typeTests with ? operatorFallible functions
#[should_panic]Expected panicInvariants, preconditions
tempfile::NamedTempFileFile/I/O testsFilesystem-dependent code

Patterns by Code Type

Code TypeTest PatternExample
Pure function (str -> str)Input literal -> assert outputassert_eq!(truncate("hello", 3), "...")
Parsing/filteringRaw string -> filter -> contains/not-containsassert!(filter(raw).contains("expected"))
Validation/securityBoundary inputs -> assert boolassert!(!is_valid("../etc/passwd"))
Error handlingBad input -> is_err()assert!(parse("garbage").is_err())
Struct/enum roundtripConstruct -> serialize -> deserialize -> eqassert_eq!(from_str(to_str(x)), x)

Naming Convention

test_{function}_{scenario}
test_{function}_{input_type}

Examples: test_truncate_edge_case, test_parse_invalid_input, test_filter_empty_string

When NOT to Use Pure TDD

  • Functions calling Command::new() -> test the parser, not the execution
  • std::process::exit() -> refactor to Result first, then test the Result
  • Direct I/O (SQLite, network) -> use tempfile/mock or test the pure logic separately
  • Main/CLI wiring -> covered by integration/smoke tests

Pre-Commit Gate

cargo fmt --all --check
cargo clippy --all-targets
cargo test

All 3 must pass. No exceptions. No #[allow(...)] without documented justification.

When not to use it

  • When testing functions that call `Command::new()` directly, as only the parser should be tested
  • When testing `std::process::exit()`, as it should be refactored to `Result` first
  • When testing direct I/O (SQLite, network) without mocks or separate logic

Limitations

  • Requires writing only enough test to fail.
  • Requires writing only enough production code to pass the failing test.
  • Pre-commit gate requires `cargo fmt --all --check`, `cargo clippy --all-targets`, and `cargo test` to pass.

How it compares

This skill provides a structured, test-first development approach for Rust, ensuring code correctness and maintainability through a disciplined Red-Green-Refactor cycle, unlike ad-hoc testing or writing tests after implementation.

Compared to similar skills

rtco-tdd side by side with the closest alternatives in the catalog.

SkillInstallsUpdatedSafetyDifficulty
rtco-tdd (this skill)02moReviewIntermediate
reproduce-reduce-regress17moNo flagsIntermediate
evolve03moNo flagsAdvanced
implementing-cards72moReviewAdvanced

Try saying

Example prompts that trigger this skill in your AI assistant.

Search skills

Search the agent skills registry