tdd

작성자: mattpocock

레드-그린-리팩터 루프를 사용한 테스트 주도 개발. 사용자가 TDD로 기능을 구축하거나 버그를 수정하려 할 때, "레드-그린-리팩터"를 언급할 때, 통합 테스트를 원할 때, 또는 테스트 우선 개발을 요청할 때 사용합니다.

npx skills add https://github.com/mattpocock/skills --skill tdd

Test-Driven Development

TDD is the red → green loop. This skill is the reference that makes that loop produce tests worth keeping: what a good test is, where tests go, the anti-patterns, and the rules of the loop. Every section applies on every cycle — consult them before and during the loop, not after.

When exploring the codebase, read CONTEXT.md (if it exists) so test names and interface vocabulary match the project's domain language, and respect ADRs in the area you're touching.

What a good test is

Tests verify behavior through public interfaces, not implementation details. Code can change entirely; tests shouldn't. A good test reads like a specification — "user can checkout with valid cart" tells you exactly what capability exists — and survives refactors because it doesn't care about internal structure.

See tests.md for examples and mocking.md for mocking guidelines.

Seams — where tests go

A seam is the public boundary you test at: the interface where you observe behavior without reaching inside. Tests live at seams, never against internals.

Test only at pre-agreed seams. Before writing any test, write down the seams under test and confirm them with the user. No test is written at an unconfirmed seam. You can't test everything — agreeing the seams up front is how testing effort lands on the critical paths and complex logic instead of every edge case.

Ask: "What's the public interface, and which seams should we test?"

Anti-patterns

  • Implementation-coupled — mocks internal collaborators, tests private methods, or verifies through a side channel (querying the database instead of using the interface). The tell: the test breaks when you refactor but behavior hasn't changed.
  • Tautological — the assertion recomputes the expected value the way the code does (expect(add(a, b)).toBe(a + b), a snapshot derived by hand the same way, a constant asserted equal to itself), so it passes by construction and can never disagree with the code. Expected values must come from an independent source of truth — a known-good literal, a worked example, the spec.
  • Horizontal slicing — writing all tests first, then all implementation. Bulk tests verify imagined behavior: you test the shape of things rather than user-facing behavior, the tests go insensitive to real changes, and you commit to test structure before understanding the implementation. Work in vertical slices instead — one test → one implementation → repeat, each test a tracer bullet that responds to what the last cycle taught you.

Rules of the loop

  • Red before green. Write the failing test first, then only enough code to pass it. Don't anticipate future tests or add speculative features.
  • One slice at a time. One seam, one test, one minimal implementation per cycle.
  • Refactoring is not part of the loop. It belongs to the review stage (see the code-review skill), not the red → green implementation cycle.

mattpocock의 다른 스킬

improve-codebase-architecture
mattpocock
코드베이스에서 심화 개선 기회를 찾되, CONTEXT.md의 도메인 언어와 docs/adr/의 결정 사항을 참고합니다. 사용자가 아키텍처를 개선하거나, 리팩토링 기회를 찾거나, 강하게 결합된 모듈을 통합하거나, 코드베이스를 더 테스트 가능하고 AI가 탐색하기 쉽게 만들고자 할 때 사용합니다.
developmentcode-reviewapi
handoff
mattpocock
현재 대화를 다른 에이전트가 이어받을 수 있도록 핸드오프 문서로 압축합니다.
communicationproject-managementdocument
prototype
mattpocock
디자인을 확정하기 전에 일회용 프로토타입을 만들어 검토합니다. 상태나 비즈니스 로직을 확인할 수 있는 실행 가능한 터미널 앱과, 하나의 경로에서 전환 가능한 여러 개의 완전히 다른 UI 변형이라는 두 가지 분기로 나뉩니다. 사용자가 프로토타입을 만들고, 데이터 모델이나 상태 머신을 검증하며, UI를 목업하고, 디자인 옵션을 탐색하려 하거나, "이걸 프로토타입으로 만들어 봐", "한번 가지고 놀게 해줘", "몇 가지 디자인을 시도해 봐"라고 말할 때 사용합니다.
developmentdesigncreative
triage
mattpocock
트라이지 역할에 의해 구동되는 상태 머신을 통해 이슈를 분류합니다. 사용자가 이슈를 생성하거나, 이슈를 분류하고, 들어오는 버그나 기능 요청을 검토하고, AFK 에이전트를 위해 이슈를 준비하거나, 이슈 워크플로를 관리하려는 경우 사용합니다.
developmentproject-managementcommunication
obsidian-vault
mattpocock
Obsidian 볼트에서 위키링크와 인덱스 노트를 사용하여 노트를 검색, 생성 및 관리합니다. 사용자가 Obsidian에서 노트를 찾거나, 생성하거나, 정리하려 할 때 사용하세요.
productivitydocument
edit-article
mattpocock
기사 초안의 섹션을 재구성하고, 명확성을 높이며, 문장을 간결하게 다듬어 편집하고 개선합니다. 사용자가 기사 초안을 편집, 수정 또는 개선하려 할 때 사용하세요.
documentcreative
writing-great-skills
mattpocock
스킬을 잘 작성하고 편집하기 위한 참고 자료 — 스킬을 예측 가능하게 만드는 어휘와 원칙.
documentdevelopment
implement
mattpocock
PRD 또는 이슈 세트를 기반으로 작업을 구현합니다.
developmentcode-reviewproject-management