A skill for coordinating the TDD (Test-Driven Development) workflow. Enforce the order, and delegate the actual work to subagents.
Overview
This skill focuses on workflow coordination:
┌─────────────────────────────────────────────────────────────┐
│ csharp-tdd-develop (Orchestrator) │
│ ├── Phase 0: 환경 감지 ──── scripts/test-detector.js │
│ └── Phase 1: 분석 ───────── 요구사항 → 테스트 시나리오 │
├─────────────────────────────────────────────────────────────┤
│ Sub-agent (Executor) │
│ ├── Phase 2 RED ─────────── 테스트 작성 + dotnet test 실패 │
│ ├── Phase 3 GREEN ───────── 최소 구현 + dotnet test 통과 │
│ └── Phase 4 REFACTOR ────── 코드 정리 + 회귀 방지 │
│ │
│ ※ csharp-best-practices 규칙 참조 가능 │
│ ※ csharp-test-develop 테스트 패턴 참조 가능 │
└─────────────────────────────────────────────────────────────┘
Enforced Rules
| Rule | Description | On Violation |
|---|---|---|
| Check environment | Detect test environment in .csproj | Guide if not installed |
| Tests first | Test code required before writing implementation code | Stop |
| Confirm Red | Tests must fail before proceeding to the next step | Stop |
| Confirm Green | Tests must pass before proceeding to refactoring | Repeat |
| Verify Refactor | Re-run tests after refactoring | Rollback |
Workflow
Phase 0: Check Environment
Automatically detect the test environment from the .csproj file.
node skills/csharp-tdd-develop/scripts/test-detector.js --detect
Normal:
## Test Environment
Runner: xUnit ✓
FluentAssertions: YES ✓
Moq: YES ✓
Test Command: dotnet test
If not installed:
## Missing Dependencies
dotnet add package xunit
dotnet add package xunit.runner.visualstudio
dotnet add package Microsoft.NET.Test.Sdk
→ Stop after providing installation guidance
Phase 1: Analysis
Convert requirements into test scenarios.
Actions:
- Identify user requirements
- Design class/service structure
- Derive 3-5 test scenarios
- Determine test file paths
Output:
## 분석 결과
### 대상 클래스
- 이름: UserService
- 경로: src/Services/UserService.cs
- 타입: Business Service
### 테스트 시나리오
1. GetByIdAsync — 유효한 ID로 사용자 반환
2. GetByIdAsync — 존재하지 않는 ID로 null 반환
3. CreateAsync — 유효한 데이터로 사용자 생성
4. CreateAsync — 중복 이메일로 예외 발생
### 테스트 파일
- 경로: tests/UnitTests/Services/UserServiceTests.cs
Phase 2: RED (Delegate to Subagent)
Delegate via Task tool:
Task({
subagent_type: "general-purpose",
prompt: `
TDD RED 단계를 수행하세요.
SOLID 원칙, GoF 디자인 패턴, Modern C# 12/13 기능을 적용하세요.
## 대상 클래스
- 이름: UserService
- 경로: src/Services/UserService.cs
## 테스트 시나리오
1. GetByIdAsync — 유효한 ID로 사용자 반환
2. GetByIdAsync — 존재하지 않는 ID로 null 반환
3. CreateAsync — 유효한 데이터로 사용자 생성
4. CreateAsync — 중복 이메일로 예외 발생
## 지침
1. 테스트 파일 생성: tests/UnitTests/Services/UserServiceTests.cs
2. 위 시나리오에 대한 테스트 케이스 작성
3. csharp-test-develop 테스트 패턴 적용 (AAA 패턴, Method_Scenario_ExpectedBehavior 네이밍)
4. 테스트 실행하여 **실패 확인** (dotnet test)
5. 테스트 결과 리포트
## 중요
- 구현 코드 작성 금지 (GREEN 단계에서 수행)
- 테스트가 반드시 실패해야 함
`
})
Verification (csharp-tdd-develop):
- Confirm test failure in the agent response
- If it passes, stop: "The test already passes. Review the scenario."
Phase 3: GREEN (Delegate to Subagent)
Delegate via Task tool:
Task({
subagent_type: "general-purpose",
prompt: `
TDD GREEN 단계를 수행하세요.
SOLID 원칙, GoF 디자인 패턴, Modern C# 12/13 기능을 적용하세요.
## 대상 클래스
- 이름: UserService
- 경로: src/Services/UserService.cs
- 테스트 파일: tests/UnitTests/Services/UserServiceTests.cs
## 지침
1. 테스트를 통과하는 **최소한의** 구현
2. Over-engineering 금지 (추가 기능, 최적화는 REFACTOR에서)
3. 테스트 실행하여 **통과 확인** (dotnet test)
4. 테스트 결과 리포트
## 중요
- 테스트 파일 수정 금지
- 불필요한 추상화 금지
`
})
Verification (csharp-tdd-develop):
- Confirm test pass in the agent response
- If it fails, request a retry (up to 3 times)
Phase 4: REFACTOR (Delegate to Subagent)
Delegate via Task tool:
Task({
subagent_type: "general-purpose",
prompt: `
TDD REFACTOR 단계를 수행하세요.
SOLID 원칙, GoF 디자인 패턴, Modern C# 12/13 기능을 적용하세요.
## 대상 파일
- 구현: src/Services/UserService.cs
- 테스트: tests/UnitTests/Services/UserServiceTests.cs
## 체크리스트
- [ ] SOLID 원칙 적용
- [ ] Modern C# 12 기능 활용
- [ ] 중복 코드 제거
- [ ] 네이밍 개선
## 지침
1. 코드 가독성 개선
2. csharp-best-practices 규칙 적용
3. 테스트 재실행하여 **회귀 없음 확인** (dotnet test)
4. 개선 사항 + 테스트 결과 리포트
## 중요
- 테스트가 실패하면 변경 사항 롤백
`
})
Verification (csharp-tdd-develop):
- Confirm test pass in the agent response
- If it fails, request a rollback
Currently passed arguments
ARGUMENTS: $ARGUMENTS
Execution Instructions
The above ARGUMENTS are the description of the class/feature to implement. Start the TDD workflow based on this description.
If ARGUMENTS is empty ask the user for the class/feature to implement.
Invocation example:
/csharp-tdd-develop UserService→ ARGUMENTS = "UserService"/csharp-tdd-develop 주문 처리 서비스→ ARGUMENTS = "Order processing service"
Execution Example
Request
"Create UserService with TDD"
Execution Flow
## Phase 0: 환경 확인
Runner: xUnit ✓ | FluentAssertions: YES ✓ | Moq: YES ✓
---
## Phase 1: 분석
- 클래스: UserService (Business Service)
- 시나리오 4개 도출
---
## Phase 2: RED
→ 서브에이전트 호출
← 테스트 파일 생성, 실패 확인됨 ❌
---
## Phase 3: GREEN
→ 서브에이전트 호출
← 서비스 구현, 테스트 통과 ✅
---
## Phase 4: REFACTOR
→ 서브에이전트 호출
← 코드 정리 완료, 테스트 유지 ✅
---
## TDD 사이클 완료!
- src/Services/UserService.cs
- tests/UnitTests/Services/UserServiceTests.cs
Test File Path Rules
| Source Location | Test Location |
|---|---|
src/Services/UserService.cs |
tests/UnitTests/Services/UserServiceTests.cs |
src/ViewModels/MainViewModel.cs |
tests/UnitTests/ViewModels/MainViewModelTests.cs |
src/Repositories/UserRepository.cs |
tests/IntegrationTests/Repositories/UserRepositoryTests.cs |
Error Handling
| Situation | Handling |
|---|---|
| Test runner not installed | Stop after outputting the installation command |
| Tests pass in RED | Request stop + scenario review |
| Still failing in GREEN | After up to 3 retries, ask the user for help |
| Fails in REFACTOR | Request rollback |
Delegation structure
csharp-tdd-develop (Orchestrator)
│
└── general-purpose sub-agent
│
└── 참조 가능 리소스:
├── csharp-best-practices/rules/ ← 12개 규칙 (필요시 Read)
└── csharp-test-develop/references/
└── csharp-test-patterns.md ← 테스트 패턴 (필요시 Read)
Resources
scripts/
test-detector.js: Detect test environment based on .csproj--detect: Check only the test environment