Test-AutoEvermation
AI 기반 단위 테스트 자동 생성 VS Code 확장 프로그램입니다. Testing Automation ChatBot 서버와 연동하여 Spring Boot Java 소스 코드에 대한 JUnit 테스트를 자동으로 생성합니다.
Publisher: 1223v
주요 기능
- 메소드 선택 기능: 클래스 전체가 아닌 특정 메소드만 선택하여 테스트 생성 가능
- 테스트 시나리오 생성: AI가 테스트 시나리오를 먼저 생성하여 사용자가 검토/수정 가능
- 단위 테스트 자동 생성: 승인된 시나리오를 기반으로 테스트 코드 자동 생성
- 테스트 파일 병합: 기존 테스트 파일이 있을 경우 새 테스트 메소드만 추가 가능
- 의존성 자동 분석: import된 클래스를 분석하여 Mock 객체 자동 생성
- 테스트 실행: 생성된 테스트를 바로 실행하고 결과 확인
- Maven/Gradle 규칙 준수:
src/main/java → src/test/java 경로 자동 변환
사용법
사이드바 열기
VS Code 왼쪽 Activity Bar에서 비커 아이콘을 클릭하여 Test-AutoEvermation 사이드바를 엽니다.
사이드바 기능 상세
1. 연결 상태 (Connection Status)
사이드바 상단에 API 서버 연결 상태가 표시됩니다.
| 상태 |
설명 |
| Connected |
서버 연결 성공 (버전 정보 표시) |
| Not connected |
서버에 연결되지 않음 |
| Not configured |
API URL이 설정되지 않음 |
2. 파일 선택 (Select Java File)
테스트를 생성할 Java 파일을 선택하는 영역입니다.
| 기능 |
설명 |
| Browse Java File |
파일 선택 다이얼로그를 열어 Java 파일 선택 |
| Use Current Editor |
현재 에디터에 열린 Java 파일을 바로 선택 |
| 선택된 파일 표시 |
파일 선택 후 파일명과 경로가 표시됨 |
| X 버튼 |
선택된 파일을 제거하고 다른 파일 선택 가능 |
메소드 선택 (Select Methods)
파일 선택 후 자동으로 Java 파일의 public 메소드 목록이 표시됩니다.
| 기능 |
설명 |
| 체크박스 |
테스트를 생성할 메소드 선택/해제 |
| All |
모든 메소드 선택 |
| None |
모든 메소드 선택 해제 |
참고: 선택된 메소드만 시나리오 및 테스트 생성 대상이 됩니다. 단, 의존성 분석을 위해 전체 클래스 코드는 서버로 전송됩니다.
테스트 생성 워크플로우
Step 1: Generate Scenarios 버튼
- 선택된 Java 파일을 분석하여 테스트 시나리오를 생성합니다
- AI가 어떤 테스트 케이스가 필요한지 먼저 제안합니다
Step 2: Test Scenarios 편집기
- 생성된 시나리오가 텍스트 에디터에 표시됩니다
- 시나리오를 검토하고 필요시 직접 수정할 수 있습니다
- 상태 표시:
Draft (편집 중) / Approved (승인됨)
Step 3: Approve / Regenerate 버튼
| 버튼 | 기능 |
|------|------|
| Approve | 시나리오를 승인하고 Generate Test 버튼 활성화 |
| Regenerate | 시나리오를 다시 생성 |
Step 4: Generate Test 버튼
- 승인된 시나리오를 기반으로 실제 테스트 코드를 생성합니다
- 시나리오가 승인되지 않으면 비활성화
테스트 파일 병합
기존 테스트 파일이 있는 경우 다음 옵션 중 선택할 수 있습니다:
| 옵션 |
설명 |
| Merge (Add New) |
기존 파일에 새 테스트 메소드만 추가 (imports도 자동 병합) |
| Overwrite |
기존 파일을 새 내용으로 덮어쓰기 |
| Create Backup |
기존 파일 백업 후 덮어쓰기 |
| Cancel |
작업 취소 |
다이얼로그에서 새로 추가될 메소드 수와 중복 메소드 수를 확인할 수 있습니다.
3. 테스트 실행 (Run Test)
생성된 테스트를 실행하고 결과를 확인합니다.
| 항목 |
설명 |
| Test Class Name |
실행할 테스트 클래스 이름 (예: UserServiceTest) |
| 버튼 |
기능 |
| Run Test |
입력한 테스트 클래스만 실행 |
| Run All Tests |
프로젝트의 모든 테스트 실행 |
지원하는 빌드 도구
- Maven:
mvn test -Dtest=<TestClassName> 실행
- Gradle:
gradlew test --tests "<TestClassName>" 실행
테스트 결과
- 성공 시: 초록색 체크마크와 함께 결과 표시
- 실패 시: 빨간색 X마크와 함께 오류 상세 내용 표시
4. 서버 설정 (Server Settings)
API 서버 연결 정보를 설정합니다.
| 항목 |
설명 |
예시 |
| API Server URL |
테스트 생성 서버 주소 |
http://localhost:8000/api/v1 |
| API Key |
인증 키 (선택사항) |
your-api-key |
| 버튼 |
기능 |
| Save Settings |
입력한 API URL과 API Key를 저장 |
| Test Connection |
서버 연결 상태를 테스트하고 결과 표시 |
5. 생성 옵션 (Generation Options)
테스트 생성 시 사용할 옵션을 설정합니다.
| 옵션 |
설명 |
선택 가능 값 |
| Test Framework |
테스트 프레임워크 선택 |
JUnit 5 (기본), JUnit 4 |
| Mocking Framework |
모킹 프레임워크 선택 |
Mockito (기본), EasyMock |
| 버튼 |
기능 |
| Open Full Settings |
VS Code 설정 페이지에서 추가 옵션 설정 (커버리지 목표, 엣지 케이스 포함 여부 등) |
전체 설정 항목
VS Code 설정(Ctrl+,)에서 Test-AutoEvermation을 검색하여 설정할 수 있습니다.
| 설정 |
설명 |
기본값 |
javaTestGenerator.apiUrl |
API 서버 URL |
http://localhost:8000/api/v1 |
javaTestGenerator.apiKey |
API 인증 키 (선택) |
- |
javaTestGenerator.testFramework |
테스트 프레임워크 |
junit5 |
javaTestGenerator.mockingFramework |
모킹 프레임워크 |
mockito |
javaTestGenerator.coverageTarget |
목표 커버리지 (%) |
80 |
javaTestGenerator.includeEdgeCases |
엣지 케이스 포함 |
true |
javaTestGenerator.autoSave |
생성된 파일 자동 저장 |
true |
javaTestGenerator.openAfterGeneration |
생성 후 파일 열기 |
true |
javaTestGenerator.includeDependencies |
의존성 클래스 포함 |
true |
javaTestGenerator.timeout |
요청 타임아웃 (ms) |
120000 |
테스트 생성 및 실행 흐름
1. 사이드바에서 Java 파일 선택 (Browse 또는 Current Editor)
↓
2. 테스트할 메소드 선택 (체크박스로 선택/해제)
↓
3. "Generate Scenarios" 버튼 클릭
↓
4. AI가 선택된 메소드에 대한 테스트 시나리오 생성
↓
5. 시나리오 검토/수정 후 "Approve" 클릭
↓
6. "Generate Test" 버튼 클릭
↓
7. API 서버에 요청 전송 (소스 코드 + 선택된 메소드 + 시나리오 + 의존성)
↓
8. 기존 테스트 파일 존재 시 병합 옵션 선택
↓
9. src/test/java/... 경로에 테스트 파일 저장/병합
↓
10. 생성된 테스트 파일이 에디터에 열림
↓
11. "Run Test" 버튼으로 테스트 실행
↓
12. 테스트 결과 확인 (성공/실패)
API 서버 요구사항
이 확장 프로그램을 사용하려면 다음 엔드포인트를 구현한 API 서버가 필요합니다.
GET /api/v1/health
서버 상태 확인
Response 200:
{
"status": "healthy",
"version": "1.0.0",
"features": ["test-generation", "ast-analysis"]
}
POST /api/v1/generate-scenarios
테스트 시나리오 생성
Headers:
X-API-Key: <api_key> (선택)
Content-Type: application/json
Request:
{
"sourceFile": {
"fileName": "UserService.java",
"packageName": "com.example.service",
"content": "public class UserService { ... }"
},
"options": {
"testFramework": "junit5",
"mockingFramework": "mockito",
"coverageTarget": 80,
"includeEdgeCases": true
},
"selectedMethods": ["findById", "createUser"]
}
Response 200:
{
"success": true,
"scenarios": "1. 정상적인 사용자 조회\n2. 존재하지 않는 사용자 조회 시 예외\n..."
}
POST /api/v1/generate-test
테스트 코드 생성
Headers:
X-API-Key: <api_key> (선택)
Content-Type: application/json
Request:
{
"sourceFile": {
"fileName": "UserService.java",
"packageName": "com.example.service",
"content": "public class UserService { ... }"
},
"dependencies": [...],
"options": {
"testFramework": "junit5",
"mockingFramework": "mockito",
"coverageTarget": 80,
"includeEdgeCases": true
},
"scenarios": "1. 정상적인 사용자 조회\n2. 존재하지 않는 사용자 조회 시 예외\n...",
"selectedMethods": ["findById", "createUser"]
}
Response 200:
{
"success": true,
"testFile": {
"fileName": "UserServiceTest.java",
"packageName": "com.example.service",
"content": "// Generated test code...",
"suggestedPath": "src/test/java/com/example/service/UserServiceTest.java"
},
"analysis": {
"astSummary": {...},
"mockingSuggestions": [...],
"argumentCaptorAdvice": [...]
}
}
POST /api/v1/analyze (선택)
코드 분석
라이선스
MIT