# Csharp Tdd Develop

> TDD 기반 C#/.NET 개발. 테스트 먼저 작성 후 구현. Red-Green-Refactor 순서 강제. 서브에이전트에 위임.

- Skill: `jeongheonk/csharp-tdd-develop` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add jeongheonk/csharp-tdd-develop`
- Raw SKILL.md: https://api.skillmd.com/api/skills/jeongheonk/csharp-tdd-develop/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: jeongheonk (https://skillmd.com/u/jeongheonk)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/jeongheonk/csharp-tdd-develop

---


# C# TDD Develop

TDD(Test-Driven Development) 워크플로우 조율 스킬. 순서를 강제하고, 실제 작업은 서브에이전트에 위임.

## Overview

이 스킬은 워크플로우 **조율**에 집중합니다:

```
┌─────────────────────────────────────────────────────────────┐
│  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 테스트 패턴 참조 가능               │
└─────────────────────────────────────────────────────────────┘
```

## 강제 규칙

| 규칙 | 설명 | 위반 시 |
|------|------|---------|
| 환경 확인 | .csproj에서 테스트 환경 감지 | 미설치 시 안내 |
| 테스트 먼저 | 구현 코드 작성 전 테스트 코드 필수 | 중단 |
| Red 확인 | 테스트가 실패해야 다음 단계 진행 | 중단 |
| Green 확인 | 테스트 통과해야 리팩토링 진행 | 반복 |
| Refactor 검증 | 리팩토링 후 테스트 재실행 | 롤백 |

---

## Workflow

### Phase 0: 환경 확인

.csproj 파일에서 테스트 환경 자동 감지.

```bash
node skills/csharp-tdd-develop/scripts/test-detector.js --detect
```

**정상:**
```
## Test Environment
Runner: xUnit ✓
FluentAssertions: YES ✓
Moq: YES ✓
Test Command: dotnet test
```

**미설치 시:**
```
## Missing Dependencies
  dotnet add package xunit
  dotnet add package xunit.runner.visualstudio
  dotnet add package Microsoft.NET.Test.Sdk
```
→ 설치 안내 후 중단

---

### Phase 1: 분석

요구사항을 테스트 시나리오로 변환.

**동작:**
1. 사용자 요구사항 파악
2. 클래스/서비스 구조 설계
3. 테스트 시나리오 3-5개 도출
4. 테스트 파일 경로 결정

**Output:**
```markdown
## 분석 결과

### 대상 클래스
- 이름: 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 (서브에이전트 위임)

**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 단계에서 수행)
- 테스트가 반드시 실패해야 함
`
})
```

**검증 (csharp-tdd-develop):**
- agent 응답에서 테스트 실패 확인
- 통과하면 중단: "테스트가 이미 통과합니다. 시나리오를 검토하세요."

---

### Phase 3: GREEN (서브에이전트 위임)

**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. 테스트 결과 리포트

## 중요
- 테스트 파일 수정 금지
- 불필요한 추상화 금지
`
})
```

**검증 (csharp-tdd-develop):**
- agent 응답에서 테스트 통과 확인
- 실패하면 재시도 요청 (최대 3회)

---

### Phase 4: REFACTOR (서브에이전트 위임)

**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. 개선 사항 + 테스트 결과 리포트

## 중요
- 테스트가 실패하면 변경 사항 롤백
`
})
```

**검증 (csharp-tdd-develop):**
- agent 응답에서 테스트 통과 확인
- 실패하면 롤백 요청

---

## 현재 전달받은 인자

**ARGUMENTS**: $ARGUMENTS

## 실행 지시

위 ARGUMENTS가 구현할 클래스/기능 설명입니다. 이 설명을 기반으로 TDD 워크플로우를 시작하세요.

**ARGUMENTS가 비어있으면** 사용자에게 구현할 클래스/기능을 질문하세요.

**호출 예시:**
- `/csharp-tdd-develop UserService` → ARGUMENTS = "UserService"
- `/csharp-tdd-develop 주문 처리 서비스` → ARGUMENTS = "주문 처리 서비스"

---

## 실행 예시

### 요청
"TDD로 UserService 만들어줘"

### 실행 흐름

```markdown
## 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
```

---

## 테스트 파일 경로 규칙

| 소스 위치 | 테스트 위치 |
|-----------|------------|
| `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

| 상황 | 처리 |
|------|------|
| 테스트 러너 미설치 | 설치 명령어 출력 후 중단 |
| RED에서 테스트 통과 | 중단 + 시나리오 검토 요청 |
| GREEN에서 계속 실패 | 최대 3회 재시도 후 사용자에게 도움 요청 |
| REFACTOR에서 실패 | 롤백 요청 |

---

## 위임 구조

```
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`: .csproj 기반 테스트 환경 감지
  - `--detect`: 테스트 환경만 확인

