Генерация тестов только для измененных файлов в PR (vs target branch)
Generates unit tests only for changed Kotlin files in a PR branch compared to target branch.
/plugin marketplace add ivanlutsenko/awac-claude-code-plugins/plugin install bereke-business-test-gen@awac-claude-code-plugins[--branch origin/master] [--dry-run]Генерирует unit тесты только для новых/измененных Kotlin файлов в текущей ветке. Идеально для PR workflow — тестируй только то, что изменил.
--branch <target> — target branch для сравнения (default: origin/master)--dry-run — только показать какие файлы будут обработаны, без генерации/test-diff # vs origin/master
/test-diff --branch origin/develop # vs develop
/test-diff --dry-run # preview без генерации
# Получить список измененных .kt файлов (исключая тесты)
git diff ${TARGET_BRANCH} --name-only --diff-filter=ACMR -- '*.kt' | \
grep -v 'Test\.kt$' | \
grep -v '/test/' | \
grep 'src/main'
Для каждого файла вызвать агент test-skip-analyzer:
{ skip: boolean, reason: string, confidence: number }Skip если:
Для каждого НЕ-skipped файла:
# Найти существующий тест
SOURCE_FILE="src/main/java/kz/berekebank/feature/auth/AuthRepository.kt"
TEST_FILE=$(echo $SOURCE_FILE | sed 's|src/main|src/test|' | sed 's|\.kt$|Test.kt|')
if [ -f "$TEST_FILE" ]; then
echo "UPDATE: $TEST_FILE"
else
echo "CREATE: $TEST_FILE"
fi
Для новых файлов (тест не существует):
/test-class <source_file>Для измененных файлов (тест существует):
git diff ${TARGET_BRANCH} -- ${SOURCE_FILE} | grep '^+.*fun '
📊 Test Diff Report
═══════════════════════════════════════════════════════
Branch: feature/auth-improvements vs origin/master
Changed files: 12
Skipped (DTO/UI): 5
Testable: 7
📝 Generated Tests:
┌─────────────────────────────────────────────────────┐
│ File │ Action │ Tests │
├─────────────────────────────────────────────────────┤
│ AuthRepository.kt │ CREATE │ 8 │
│ LoginInteractor.kt │ UPDATE │ +3 │
│ TokenValidator.kt │ CREATE │ 5 │
│ OtpFormatter.kt │ CREATE │ 4 │
│ SessionManager.kt │ UPDATE │ +2 │
│ BiometricHelper.kt │ CREATE │ 6 │
│ CredentialsMapper.kt │ SKIP │ - │
└─────────────────────────────────────────────────────┘
⏱️ Time: 4m 32s
📈 Coverage delta: +12.3% (estimated)
✅ Ready for PR!
При --dry-run выводится только план без генерации:
📋 Dry Run - Test Diff Plan
═══════════════════════════════════════════════════════
Branch: feature/auth vs origin/master
Files to process:
✅ CREATE test: AuthRepository.kt
✅ UPDATE test: LoginInteractor.kt (2 new methods)
⏭️ SKIP: AuthDto.kt (DTO without logic)
⏭️ SKIP: AuthModule.kt (DI module)
⏭️ SKIP: LoginActivity.kt (UI component)
Summary: 2 tests to create, 1 to update, 3 skipped
Run without --dry-run to generate tests.
Пример использования в GitHub Actions:
- name: Generate tests for PR
run: |
claude "/test-diff --branch origin/${{ github.base_ref }}"