aiwf 0.3.6 → 0.3.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -0,0 +1,561 @@
|
|
|
1
|
+
# 프로젝트 테스트 케이스 병렬 생성 커맨드
|
|
2
|
+
|
|
3
|
+
이 커맨드는 프로젝트의 소스 코드를 분석하여 포괄적인 테스트(단위/통합/E2E)를 병렬로 생성합니다.
|
|
4
|
+
|
|
5
|
+
## 사용법
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
/aiwf:aiwf_create_testcase [test_type] [subagent_count]
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
**파라미터:**
|
|
12
|
+
- `test_type` (선택사항): 생성할 테스트 타입 (기본값: unit)
|
|
13
|
+
- `unit`: 단위 테스트
|
|
14
|
+
- `e2e`: End-to-End 테스트
|
|
15
|
+
- `integration`: 통합 테스트
|
|
16
|
+
- `all`: 모든 종류의 테스트
|
|
17
|
+
- `subagent_count` (선택사항): 생성할 Subagent 수 (기본값: 5, 최대: 10)
|
|
18
|
+
|
|
19
|
+
## 예시
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
# 기본 단위 테스트 생성 (5개 Subagent)
|
|
23
|
+
/aiwf:aiwf_create_testcase
|
|
24
|
+
|
|
25
|
+
# E2E 테스트 생성 (5개 Subagent)
|
|
26
|
+
/aiwf:aiwf_create_testcase e2e
|
|
27
|
+
|
|
28
|
+
# 통합 테스트를 8개 Subagent로 생성
|
|
29
|
+
/aiwf:aiwf_create_testcase integration 8
|
|
30
|
+
|
|
31
|
+
# 모든 종류의 테스트를 10개 Subagent로 생성
|
|
32
|
+
/aiwf:aiwf_create_testcase all 10
|
|
33
|
+
|
|
34
|
+
# 단위 테스트를 3개 Subagent로 생성
|
|
35
|
+
/aiwf:aiwf_create_testcase unit 3
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
# 프로젝트 테스트 케이스 병렬 생성 워크플로우
|
|
41
|
+
|
|
42
|
+
**목표**: 프로젝트의 모든 주요 비즈니스 로직에 대한 포괄적인 테스트를 병렬로 생성하여 90% 이상의 테스트 커버리지를 달성
|
|
43
|
+
|
|
44
|
+
## 정확히 다음 5개 항목으로 TODO 생성
|
|
45
|
+
|
|
46
|
+
1. 인수 파싱 및 프로젝트 구조 분석
|
|
47
|
+
2. 테스트 대상 파일 식별 및 Subagent 작업 분할
|
|
48
|
+
3. 병렬 Subagent 실행으로 테스트 코드 생성
|
|
49
|
+
4. 테스트 실행 및 커버리지 검증
|
|
50
|
+
5. 결과 보고 및 최적화 제안
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## 1 · 인수 파싱 및 프로젝트 구조 분석
|
|
55
|
+
|
|
56
|
+
### 인수 처리
|
|
57
|
+
- `<$ARGUMENTS>`에서 테스트 타입과 Subagent 수 파싱
|
|
58
|
+
- 첫 번째 인수가 테스트 타입인지 확인 (unit, e2e, integration, all)
|
|
59
|
+
- 테스트 타입이 아니면 숫자로 간주하고 unit 테스트로 설정
|
|
60
|
+
- 유효한 테스트 타입: unit(기본값), e2e, integration, all
|
|
61
|
+
- 두 번째 인수가 있으면 Subagent 수로 파싱 (기본값: 5, 최대: 10)
|
|
62
|
+
- 잘못된 값이면 기본값 사용 및 사용자에게 알림
|
|
63
|
+
|
|
64
|
+
### 프로젝트 구조 분석
|
|
65
|
+
다음 명령어들을 **병렬로 실행**하여 프로젝트 타입과 상태 파악:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
# 프로젝트 언어 감지
|
|
69
|
+
find . -name "*.py" -o -name "*.js" -o -name "*.ts" -o -name "*.java" -o -name "*.go" -o -name "*.rb" -o -name "*.cs" | grep -v node_modules | grep -v venv | head -20
|
|
70
|
+
|
|
71
|
+
# 프로젝트 관리 파일 확인
|
|
72
|
+
ls -la | grep -E "package.json|requirements.txt|pom.xml|go.mod|Gemfile|*.csproj|Cargo.toml"
|
|
73
|
+
|
|
74
|
+
# 기존 테스트 파일 확인
|
|
75
|
+
find . -type f \( -name "*test*" -o -name "*spec*" \) -not -path "*/node_modules/*" -not -path "*/venv/*" -not -path "*/.git/*" | head -20
|
|
76
|
+
|
|
77
|
+
# 테스트 설정 파일 확인
|
|
78
|
+
find . -maxdepth 2 -name "jest.config.*" -o -name "pytest.ini" -o -name "phpunit.xml" -o -name "go.mod" -o -name ".rspec" -o -name "test.config.*"
|
|
79
|
+
|
|
80
|
+
# 빌드/테스트 스크립트 확인
|
|
81
|
+
if [ -f "package.json" ]; then
|
|
82
|
+
cat package.json | jq '.scripts' 2>/dev/null || grep -A 10 '"scripts"' package.json
|
|
83
|
+
elif [ -f "Makefile" ]; then
|
|
84
|
+
grep -E "^test:|^check:" Makefile
|
|
85
|
+
elif [ -f "build.gradle" ] || [ -f "pom.xml" ]; then
|
|
86
|
+
echo "Java/Kotlin project detected"
|
|
87
|
+
fi
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### 테스트 환경 검증
|
|
91
|
+
- **언어 자동 감지**: Python, JavaScript/TypeScript, Java, Go, Ruby, C# 등
|
|
92
|
+
- **테스트 프레임워크 감지**: Jest, Pytest, JUnit, Go test, RSpec, xUnit 등
|
|
93
|
+
- **패키지 매니저 확인**: npm, pip, maven, go mod, bundler, nuget 등
|
|
94
|
+
- **빌드 시스템 확인**: Make, Gradle, Maven, npm scripts 등
|
|
95
|
+
|
|
96
|
+
## 2 · 테스트 대상 파일 식별 및 Subagent 작업 분할
|
|
97
|
+
|
|
98
|
+
### 테스트 대상 식별
|
|
99
|
+
테스트 타입에 따라 대상 파일들을 식별:
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
# 테스트 타입에 따른 대상 파일 식별
|
|
103
|
+
TEST_TYPE="${1:-unit}" # 첫 번째 인수 또는 기본값 unit
|
|
104
|
+
|
|
105
|
+
case "$TEST_TYPE" in
|
|
106
|
+
"unit")
|
|
107
|
+
echo "단위 테스트 대상 파일 검색..."
|
|
108
|
+
# 개별 클래스/모듈/함수 파일 검색
|
|
109
|
+
find . -type f \( -name "*.service.*" -o -name "*.controller.*" -o -name "*.helper.*" -o -name "*.util.*" -o -name "*.model.*" -o -name "*Service.*" -o -name "*Controller.*" -o -name "*Repository.*" -o -name "*Utils.*" \) | grep -v test | grep -v spec
|
|
110
|
+
;;
|
|
111
|
+
|
|
112
|
+
"integration")
|
|
113
|
+
echo "통합 테스트 대상 파일 검색..."
|
|
114
|
+
# API 엔드포인트, 데이터베이스 연동, 서비스 간 통합 파일 검색
|
|
115
|
+
find . -type f \( -name "*api*" -o -name "*route*" -o -name "*endpoint*" -o -name "*repository*" -o -name "*dao*" \) | grep -v test | grep -v spec
|
|
116
|
+
# 설정 파일도 포함
|
|
117
|
+
find . -maxdepth 3 -name "*config*" -o -name "*setup*" | grep -v node_modules | grep -v venv
|
|
118
|
+
;;
|
|
119
|
+
|
|
120
|
+
"e2e")
|
|
121
|
+
echo "E2E 테스트 대상 검색..."
|
|
122
|
+
# 전체 애플리케이션 플로우, 페이지, 시나리오 검색
|
|
123
|
+
find . -type f \( -name "*page*" -o -name "*view*" -o -name "*screen*" -o -name "*flow*" \) | grep -v test | grep -v spec
|
|
124
|
+
# 메인 엔트리 포인트 검색
|
|
125
|
+
find . -maxdepth 2 \( -name "main.*" -o -name "app.*" -o -name "index.*" -o -name "server.*" \)
|
|
126
|
+
;;
|
|
127
|
+
|
|
128
|
+
"all")
|
|
129
|
+
echo "모든 테스트 대상 파일 검색..."
|
|
130
|
+
# 모든 소스 코드 파일 검색 (테스트 파일 제외)
|
|
131
|
+
find . -type f \( -name "*.js" -o -name "*.ts" -o -name "*.py" -o -name "*.java" -o -name "*.kt" -o -name "*.go" -o -name "*.rb" -o -name "*.cs" \) | grep -v test | grep -v spec | grep -v node_modules | grep -v venv | grep -v vendor
|
|
132
|
+
;;
|
|
133
|
+
esac
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### 작업 분할 전략
|
|
137
|
+
**테스트 타입별 분할 방식:**
|
|
138
|
+
|
|
139
|
+
#### 단위 테스트 (unit)
|
|
140
|
+
**3개 Subagent:**
|
|
141
|
+
1. **Agent 1**: 핵심 비즈니스 로직 (서비스, 도메인 모델)
|
|
142
|
+
2. **Agent 2**: 컨트롤러/핸들러 계층
|
|
143
|
+
3. **Agent 3**: 유틸리티/헬퍼 + 모킹 인프라
|
|
144
|
+
|
|
145
|
+
**5개 Subagent (기본):**
|
|
146
|
+
1. **Agent 1**: 인증/보안 관련 단위 테스트
|
|
147
|
+
2. **Agent 2**: 핵심 도메인 로직 단위 테스트
|
|
148
|
+
3. **Agent 3**: 데이터 접근 계층 단위 테스트
|
|
149
|
+
4. **Agent 4**: 외부 서비스 모킹 및 단위 테스트
|
|
150
|
+
5. **Agent 5**: 유틸리티 함수 + 테스트 헬퍼
|
|
151
|
+
|
|
152
|
+
#### 통합 테스트 (integration)
|
|
153
|
+
**3개 Subagent:**
|
|
154
|
+
1. **Agent 1**: API 엔드포인트 통합 테스트
|
|
155
|
+
2. **Agent 2**: 데이터베이스 연동 테스트
|
|
156
|
+
3. **Agent 3**: 서비스 간 통합 테스트
|
|
157
|
+
|
|
158
|
+
**5개 Subagent (기본):**
|
|
159
|
+
1. **Agent 1**: REST API 통합 테스트
|
|
160
|
+
2. **Agent 2**: 데이터베이스 트랜잭션 테스트
|
|
161
|
+
3. **Agent 3**: 외부 서비스 통합 테스트
|
|
162
|
+
4. **Agent 4**: 메시징/이벤트 시스템 테스트
|
|
163
|
+
5. **Agent 5**: 설정 및 환경 통합 테스트
|
|
164
|
+
|
|
165
|
+
#### E2E 테스트 (e2e)
|
|
166
|
+
**3개 Subagent:**
|
|
167
|
+
1. **Agent 1**: 주요 사용자 시나리오 테스트
|
|
168
|
+
2. **Agent 2**: 페이지/화면 네비게이션 테스트
|
|
169
|
+
3. **Agent 3**: 크로스 브라우저/플랫폼 테스트
|
|
170
|
+
|
|
171
|
+
**5개 Subagent (기본):**
|
|
172
|
+
1. **Agent 1**: 사용자 인증 플로우 E2E
|
|
173
|
+
2. **Agent 2**: 핵심 기능 시나리오 E2E
|
|
174
|
+
3. **Agent 3**: 데이터 입력/검증 플로우 E2E
|
|
175
|
+
4. **Agent 4**: 에러 처리 및 복구 시나리오
|
|
176
|
+
5. **Agent 5**: 성능 및 부하 테스트 시나리오
|
|
177
|
+
|
|
178
|
+
#### 전체 테스트 (all)
|
|
179
|
+
**8개+ Subagent 권장:**
|
|
180
|
+
- 단위, 통합, E2E를 모두 포함하여 분할
|
|
181
|
+
- 각 테스트 타입별로 2-3개 Agent 할당
|
|
182
|
+
- 테스트 인프라와 리포팅을 별도 Agent로 분리
|
|
183
|
+
|
|
184
|
+
### 우선순위 매트릭스 생성
|
|
185
|
+
각 파일에 대해 다음 기준으로 우선순위 설정:
|
|
186
|
+
- **비즈니스 중요도**: 핵심 기능 vs 부가 기능
|
|
187
|
+
- **복잡도**: 로직 복잡성, 의존성 수
|
|
188
|
+
- **테스트 부족도**: 기존 테스트 커버리지
|
|
189
|
+
- **변경 빈도**: Git 히스토리 기반 변경 빈도
|
|
190
|
+
|
|
191
|
+
## 3 · 병렬 Subagent 실행으로 테스트 코드 생성
|
|
192
|
+
|
|
193
|
+
### Subagent 작업 템플릿
|
|
194
|
+
각 Subagent에게 테스트 타입에 맞는 작업 지시:
|
|
195
|
+
|
|
196
|
+
```
|
|
197
|
+
/**
|
|
198
|
+
* Subagent {번호}: {도메인명} {테스트 타입} 테스트 구현
|
|
199
|
+
*
|
|
200
|
+
* 프로젝트 언어: {감지된 언어}
|
|
201
|
+
* 테스트 프레임워크: {감지된 테스트 프레임워크}
|
|
202
|
+
* 테스트 타입: {unit|integration|e2e}
|
|
203
|
+
*
|
|
204
|
+
* 담당 파일/영역:
|
|
205
|
+
* - {파일/기능 목록}
|
|
206
|
+
*
|
|
207
|
+
* 테스트 타입별 요구사항:
|
|
208
|
+
*
|
|
209
|
+
* [단위 테스트인 경우]
|
|
210
|
+
* - 각 함수/메서드를 독립적으로 테스트
|
|
211
|
+
* - 모든 의존성을 모킹/스터빙
|
|
212
|
+
* - 빠른 실행 속도 유지
|
|
213
|
+
* - 단일 책임 원칙 준수
|
|
214
|
+
*
|
|
215
|
+
* [통합 테스트인 경우]
|
|
216
|
+
* - 실제 데이터베이스/외부 서비스 연동
|
|
217
|
+
* - 트랜잭션 롤백 처리
|
|
218
|
+
* - API 엔드포인트 전체 플로우 검증
|
|
219
|
+
* - 에러 전파 및 처리 검증
|
|
220
|
+
*
|
|
221
|
+
* [E2E 테스트인 경우]
|
|
222
|
+
* - 실제 사용자 시나리오 시뮬레이션
|
|
223
|
+
* - UI 자동화 도구 활용 (Selenium, Playwright, Cypress 등)
|
|
224
|
+
* - 크로스 브라우저 호환성 검증
|
|
225
|
+
* - 성능 메트릭 수집
|
|
226
|
+
*
|
|
227
|
+
* 공통 요구사항:
|
|
228
|
+
* 1. 프로젝트의 기존 테스트 패턴 분석 후 동일한 스타일 적용
|
|
229
|
+
* 2. 90% 이상 코드 커버리지 달성 (해당 테스트 타입 범위 내)
|
|
230
|
+
* 3. 명확한 테스트 설명 작성
|
|
231
|
+
* 4. 테스트 데이터 관리 전략 수립
|
|
232
|
+
*
|
|
233
|
+
* 출력:
|
|
234
|
+
* 완성된 테스트 파일들의 전체 코드
|
|
235
|
+
* (테스트 타입별 명명 규칙 준수)
|
|
236
|
+
*/
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
### 동시 실행 관리
|
|
240
|
+
- 모든 Subagent를 **단일 메시지에서 동시 실행**
|
|
241
|
+
- 각 Agent의 진행상황 추적
|
|
242
|
+
- 의존성 충돌 방지 (동일 파일을 여러 Agent가 처리하지 않도록)
|
|
243
|
+
|
|
244
|
+
### 언어 및 테스트 타입별 특화 지시사항
|
|
245
|
+
|
|
246
|
+
#### JavaScript/TypeScript
|
|
247
|
+
**단위 테스트:**
|
|
248
|
+
- Jest, Mocha, Vitest의 모킹 기능 활용
|
|
249
|
+
- 함수/클래스 단위로 격리된 테스트
|
|
250
|
+
|
|
251
|
+
**통합 테스트:**
|
|
252
|
+
- Supertest로 API 엔드포인트 테스트
|
|
253
|
+
- 실제 데이터베이스 연결 (테스트 DB)
|
|
254
|
+
|
|
255
|
+
**E2E 테스트:**
|
|
256
|
+
- Playwright, Cypress, Puppeteer 활용
|
|
257
|
+
- 페이지 객체 모델 패턴 적용
|
|
258
|
+
|
|
259
|
+
#### Python
|
|
260
|
+
**단위 테스트:**
|
|
261
|
+
- unittest.mock, pytest-mock 활용
|
|
262
|
+
- 데코레이터와 context manager 테스트
|
|
263
|
+
|
|
264
|
+
**통합 테스트:**
|
|
265
|
+
- Django: TestCase와 TransactionTestCase
|
|
266
|
+
- FastAPI: TestClient와 실제 DB 연동
|
|
267
|
+
|
|
268
|
+
**E2E 테스트:**
|
|
269
|
+
- Selenium WebDriver, Playwright
|
|
270
|
+
- Behave로 BDD 스타일 테스트
|
|
271
|
+
|
|
272
|
+
#### Java/Kotlin
|
|
273
|
+
**단위 테스트:**
|
|
274
|
+
- Mockito로 의존성 모킹
|
|
275
|
+
- @Mock, @InjectMocks 활용
|
|
276
|
+
|
|
277
|
+
**통합 테스트:**
|
|
278
|
+
- @SpringBootTest, @DataJpaTest
|
|
279
|
+
- TestContainers로 실제 DB 테스트
|
|
280
|
+
|
|
281
|
+
**E2E 테스트:**
|
|
282
|
+
- Selenium Grid, Appium
|
|
283
|
+
- Rest Assured로 API 시나리오 테스트
|
|
284
|
+
|
|
285
|
+
#### Go
|
|
286
|
+
**단위 테스트:**
|
|
287
|
+
- 인터페이스 기반 모킹
|
|
288
|
+
- 테이블 드리븐 테스트
|
|
289
|
+
|
|
290
|
+
**통합 테스트:**
|
|
291
|
+
- httptest로 HTTP 핸들러 테스트
|
|
292
|
+
- 실제 DB 연결 테스트
|
|
293
|
+
|
|
294
|
+
**E2E 테스트:**
|
|
295
|
+
- Chromedp, Rod로 브라우저 자동화
|
|
296
|
+
- Ginkgo로 BDD 스타일 테스트
|
|
297
|
+
|
|
298
|
+
#### Ruby
|
|
299
|
+
**단위 테스트:**
|
|
300
|
+
- RSpec doubles, stubs
|
|
301
|
+
- 격리된 클래스/모듈 테스트
|
|
302
|
+
|
|
303
|
+
**통합 테스트:**
|
|
304
|
+
- Rails: request specs
|
|
305
|
+
- Database cleaner로 트랜잭션 관리
|
|
306
|
+
|
|
307
|
+
**E2E 테스트:**
|
|
308
|
+
- Capybara + Selenium
|
|
309
|
+
- 시나리오 기반 feature specs
|
|
310
|
+
|
|
311
|
+
#### C#
|
|
312
|
+
**단위 테스트:**
|
|
313
|
+
- Moq, NSubstitute로 모킹
|
|
314
|
+
- async/await 테스트 패턴
|
|
315
|
+
|
|
316
|
+
**통합 테스트:**
|
|
317
|
+
- WebApplicationFactory 활용
|
|
318
|
+
- In-memory DB 또는 실제 DB
|
|
319
|
+
|
|
320
|
+
**E2E 테스트:**
|
|
321
|
+
- Selenium, SpecFlow
|
|
322
|
+
- Page Object 패턴 적용
|
|
323
|
+
|
|
324
|
+
## 4 · 테스트 실행 및 커버리지 검증
|
|
325
|
+
|
|
326
|
+
### 테스트 실행
|
|
327
|
+
테스트 타입과 언어별로 적절한 테스트 명령어를 **병렬로 실행**:
|
|
328
|
+
|
|
329
|
+
```bash
|
|
330
|
+
TEST_TYPE="${1:-unit}" # 테스트 타입
|
|
331
|
+
|
|
332
|
+
# JavaScript/TypeScript
|
|
333
|
+
if [ -f "package.json" ]; then
|
|
334
|
+
case "$TEST_TYPE" in
|
|
335
|
+
"unit")
|
|
336
|
+
npm test || npm run test:unit
|
|
337
|
+
;;
|
|
338
|
+
"integration")
|
|
339
|
+
npm run test:integration || npm run test:int
|
|
340
|
+
;;
|
|
341
|
+
"e2e")
|
|
342
|
+
npm run test:e2e || npm run e2e || npm run cypress:run
|
|
343
|
+
;;
|
|
344
|
+
"all")
|
|
345
|
+
npm test && npm run test:integration && npm run test:e2e
|
|
346
|
+
;;
|
|
347
|
+
esac
|
|
348
|
+
npm run test:coverage || npm run test:cov || jest --coverage
|
|
349
|
+
fi
|
|
350
|
+
|
|
351
|
+
# Python
|
|
352
|
+
if [ -f "requirements.txt" ] || [ -f "setup.py" ]; then
|
|
353
|
+
case "$TEST_TYPE" in
|
|
354
|
+
"unit")
|
|
355
|
+
pytest tests/unit || pytest -m unit
|
|
356
|
+
;;
|
|
357
|
+
"integration")
|
|
358
|
+
pytest tests/integration || pytest -m integration
|
|
359
|
+
;;
|
|
360
|
+
"e2e")
|
|
361
|
+
pytest tests/e2e || pytest -m e2e || behave
|
|
362
|
+
;;
|
|
363
|
+
"all")
|
|
364
|
+
pytest
|
|
365
|
+
;;
|
|
366
|
+
esac
|
|
367
|
+
pytest --cov || coverage run -m pytest
|
|
368
|
+
fi
|
|
369
|
+
|
|
370
|
+
# Java/Kotlin
|
|
371
|
+
if [ -f "pom.xml" ]; then
|
|
372
|
+
case "$TEST_TYPE" in
|
|
373
|
+
"unit")
|
|
374
|
+
mvn test -Dtest="*Test"
|
|
375
|
+
;;
|
|
376
|
+
"integration")
|
|
377
|
+
mvn test -Dtest="*IT"
|
|
378
|
+
;;
|
|
379
|
+
"e2e")
|
|
380
|
+
mvn test -Dtest="*E2E"
|
|
381
|
+
;;
|
|
382
|
+
"all")
|
|
383
|
+
mvn test
|
|
384
|
+
;;
|
|
385
|
+
esac
|
|
386
|
+
mvn jacoco:report
|
|
387
|
+
elif [ -f "build.gradle" ]; then
|
|
388
|
+
case "$TEST_TYPE" in
|
|
389
|
+
"unit")
|
|
390
|
+
./gradlew test
|
|
391
|
+
;;
|
|
392
|
+
"integration")
|
|
393
|
+
./gradlew integrationTest
|
|
394
|
+
;;
|
|
395
|
+
"e2e")
|
|
396
|
+
./gradlew e2eTest
|
|
397
|
+
;;
|
|
398
|
+
"all")
|
|
399
|
+
./gradlew check
|
|
400
|
+
;;
|
|
401
|
+
esac
|
|
402
|
+
./gradlew jacocoTestReport
|
|
403
|
+
fi
|
|
404
|
+
|
|
405
|
+
# Go
|
|
406
|
+
if [ -f "go.mod" ]; then
|
|
407
|
+
case "$TEST_TYPE" in
|
|
408
|
+
"unit")
|
|
409
|
+
go test -short ./...
|
|
410
|
+
;;
|
|
411
|
+
"integration")
|
|
412
|
+
go test -run Integration ./...
|
|
413
|
+
;;
|
|
414
|
+
"e2e")
|
|
415
|
+
go test -run E2E ./...
|
|
416
|
+
;;
|
|
417
|
+
"all")
|
|
418
|
+
go test ./...
|
|
419
|
+
;;
|
|
420
|
+
esac
|
|
421
|
+
go test -cover ./...
|
|
422
|
+
fi
|
|
423
|
+
|
|
424
|
+
# Ruby
|
|
425
|
+
if [ -f "Gemfile" ]; then
|
|
426
|
+
case "$TEST_TYPE" in
|
|
427
|
+
"unit")
|
|
428
|
+
bundle exec rspec spec/unit
|
|
429
|
+
;;
|
|
430
|
+
"integration")
|
|
431
|
+
bundle exec rspec spec/integration
|
|
432
|
+
;;
|
|
433
|
+
"e2e")
|
|
434
|
+
bundle exec rspec spec/features || bundle exec cucumber
|
|
435
|
+
;;
|
|
436
|
+
"all")
|
|
437
|
+
bundle exec rspec
|
|
438
|
+
;;
|
|
439
|
+
esac
|
|
440
|
+
fi
|
|
441
|
+
|
|
442
|
+
# C#
|
|
443
|
+
if ls *.csproj 1> /dev/null 2>&1; then
|
|
444
|
+
case "$TEST_TYPE" in
|
|
445
|
+
"unit")
|
|
446
|
+
dotnet test --filter "Category=Unit"
|
|
447
|
+
;;
|
|
448
|
+
"integration")
|
|
449
|
+
dotnet test --filter "Category=Integration"
|
|
450
|
+
;;
|
|
451
|
+
"e2e")
|
|
452
|
+
dotnet test --filter "Category=E2E"
|
|
453
|
+
;;
|
|
454
|
+
"all")
|
|
455
|
+
dotnet test
|
|
456
|
+
;;
|
|
457
|
+
esac
|
|
458
|
+
dotnet test /p:CollectCoverage=true
|
|
459
|
+
fi
|
|
460
|
+
```
|
|
461
|
+
|
|
462
|
+
### 커버리지 분석
|
|
463
|
+
- 전체 커버리지 % 확인
|
|
464
|
+
- 파일별 커버리지 상세 분석
|
|
465
|
+
- 90% 미달 파일 식별
|
|
466
|
+
- 미커버 라인 분석
|
|
467
|
+
|
|
468
|
+
### 실패 테스트 처리
|
|
469
|
+
**테스트 실패 시 자동 수정:**
|
|
470
|
+
- 컴파일/문법 에러 수정
|
|
471
|
+
- 모킹/스텁 설정 오류 수정
|
|
472
|
+
- 의존성 문제 해결
|
|
473
|
+
- 비동기 테스트 타이밍 이슈 수정
|
|
474
|
+
- import/require 경로 문제 수정
|
|
475
|
+
|
|
476
|
+
**3회 재시도 후에도 실패 시:**
|
|
477
|
+
- 문제 분석 보고서 생성
|
|
478
|
+
- 수동 수정이 필요한 부분 명시
|
|
479
|
+
- 임시 해결책 제안
|
|
480
|
+
|
|
481
|
+
## 5 · 결과 보고 및 최적화 제안
|
|
482
|
+
|
|
483
|
+
### 성과 요약 보고
|
|
484
|
+
```markdown
|
|
485
|
+
## 🎯 테스트 생성 결과
|
|
486
|
+
|
|
487
|
+
### 📊 커버리지 성과
|
|
488
|
+
- **이전**: {이전_커버리지}%
|
|
489
|
+
- **현재**: {현재_커버리지}%
|
|
490
|
+
- **개선도**: +{개선도}%
|
|
491
|
+
|
|
492
|
+
### 📁 생성된 테스트 파일
|
|
493
|
+
- **총 파일 수**: {파일수}개
|
|
494
|
+
- **총 테스트 케이스**: {테스트케이스수}개
|
|
495
|
+
- **성공률**: {성공률}%
|
|
496
|
+
|
|
497
|
+
### ⚡ 성능 지표
|
|
498
|
+
- **작업 시간**: {시간}
|
|
499
|
+
- **병렬 효율성**: {효율성}% 향상
|
|
500
|
+
- **품질 점수**: {품질점수}/100
|
|
501
|
+
```
|
|
502
|
+
|
|
503
|
+
### 최적화 제안사항
|
|
504
|
+
**높은 우선순위:**
|
|
505
|
+
- 90% 미달 파일에 대한 추가 테스트 제안
|
|
506
|
+
- 테스트 성능 최적화 방안
|
|
507
|
+
- CI/CD 파이프라인 통합 제안
|
|
508
|
+
|
|
509
|
+
**중간 우선순위:**
|
|
510
|
+
- E2E 테스트 확장 계획
|
|
511
|
+
- 테스트 데이터 관리 개선
|
|
512
|
+
- 테스트 문서화 방안
|
|
513
|
+
|
|
514
|
+
**낮은 우선순위:**
|
|
515
|
+
- 성능 테스트 추가
|
|
516
|
+
- 접근성 테스트 고려
|
|
517
|
+
- 국제화 테스트 방안
|
|
518
|
+
|
|
519
|
+
### 다음 단계 액션 아이템
|
|
520
|
+
1. **즉시 실행**: 90% 미달 파일 보완
|
|
521
|
+
2. **1주일 내**: CI/CD 테스트 자동화 설정
|
|
522
|
+
3. **1개월 내**: E2E 테스트 스위트 구축
|
|
523
|
+
|
|
524
|
+
---
|
|
525
|
+
|
|
526
|
+
## 🚨 중요 사항
|
|
527
|
+
|
|
528
|
+
### 지원되는 프로젝트 타입
|
|
529
|
+
- **JavaScript/TypeScript**: Node.js, React, Vue, Angular 등
|
|
530
|
+
- **Python**: Django, Flask, FastAPI, 일반 Python 프로젝트
|
|
531
|
+
- **Java/Kotlin**: Spring Boot, Micronaut, 일반 Java 프로젝트
|
|
532
|
+
- **Go**: 표준 Go 프로젝트, Gin, Echo 등
|
|
533
|
+
- **Ruby**: Rails, Sinatra, 일반 Ruby 프로젝트
|
|
534
|
+
- **C#**: ASP.NET Core, .NET 프로젝트
|
|
535
|
+
|
|
536
|
+
### 지원되는 테스트 프레임워크
|
|
537
|
+
- **JavaScript/TypeScript**: Jest, Mocha, Vitest, Jasmine
|
|
538
|
+
- **Python**: pytest, unittest, nose
|
|
539
|
+
- **Java/Kotlin**: JUnit, TestNG, Spock
|
|
540
|
+
- **Go**: 내장 testing 패키지, testify
|
|
541
|
+
- **Ruby**: RSpec, Minitest
|
|
542
|
+
- **C#**: xUnit, NUnit, MSTest
|
|
543
|
+
|
|
544
|
+
### 전제 조건
|
|
545
|
+
- 프로젝트에 적절한 빌드 시스템이 설정되어 있어야 함
|
|
546
|
+
- 기본적인 테스트 실행 환경이 구성되어 있어야 함
|
|
547
|
+
- 의존성 패키지가 설치되어 있어야 함
|
|
548
|
+
|
|
549
|
+
### 제한사항
|
|
550
|
+
- 매우 복잡한 레거시 코드의 경우 수동 수정 필요할 수 있음
|
|
551
|
+
- 외부 API 의존성이 매우 복잡한 경우 추가 모킹 작업 필요
|
|
552
|
+
- 데이터베이스 스키마가 복잡한 경우 추가 설정 필요
|
|
553
|
+
- GUI 관련 테스트는 단위 테스트 범위에서 제외
|
|
554
|
+
|
|
555
|
+
### 안전장치
|
|
556
|
+
- 기존 테스트 파일은 백업 후 수정
|
|
557
|
+
- 실패한 테스트는 건너뛰고 계속 진행
|
|
558
|
+
- 프로젝트에 손상을 주지 않는 안전한 실행
|
|
559
|
+
- 언어별 관례에 따른 테스트 파일 명명
|
|
560
|
+
|
|
561
|
+
이 커맨드를 통해 어떤 프로젝트든 빠르고 효율적으로 고품질 테스트 스위트를 구축할 수 있습니다!
|