Springboot Verification

affaan-m/ECC/docs/tr/skills/springboot-verification

作者 affaan-mef648e01899ba3e8dc6371642deaaf64b4477775无许可证275K 个星标收录于 2026年10月9日更新于 2026年10月9日仓库4天前更新

Verification loop for Spring Boot projects: build, static analysis, tests with coverage, security scans, and diff review before release or PR.

AI 生成的概览

为 Spring Boot 项目运行验证循环:构建、静态分析、带覆盖率的测试、安全扫描和差异审查。

功能
该技能为 Spring Boot 项目定义了一个六阶段验证流程,涵盖构建、静态分析、带覆盖率的测试、安全扫描、可选的代码风格/格式化检查以及差异审查。它提供具体的 Maven 和 Gradle 命令,以及使用 Mockito、Testcontainers 和 MockMvc 的 Java 测试示例。它会生成一份结构化的验证报告模板,包含各阶段的通过/失败状态和待修复问题清单。
适用场景
适用于为 Spring Boot 服务提交拉取请求之前、大规模重构或依赖升级之后,或部署到预发布或生产环境之前。也适合需要确认测试覆盖率是否达到阈值,或运行从构建到安全扫描的完整流水线时使用。
运行要求
需要一个使用 Maven 或 Gradle 的 Spring Boot 项目,以及相关插件(SpotBugs、PMD、Checkstyle、JaCoCo、OWASP dependency-check、Spotless)和测试库(JUnit、Mockito、Testcontainers、MockMvc)。部分步骤需要网络访问以下载依赖和 CVE 数据;git secrets 扫描需要预先配置该工具。该技能不附带任何脚本。

Spring Boot Doğrulama Döngüsü

PR'lardan önce, büyük değişikliklerden sonra ve deployment öncesi çalıştırın.

Ne Zaman Aktif Edilir

  • Spring Boot servisi için pull request açmadan önce
  • Büyük refactoring veya bağımlılık yükseltmelerinden sonra
  • Staging veya production için deployment öncesi doğrulama
  • Tam build → lint → test → güvenlik taraması pipeline'ı çalıştırma
  • Test kapsamının eşikleri karşıladığını doğrulama

Faz 1: Build

bash
mvn -T 4 clean verify -DskipTests# veya./gradlew clean assemble -x test

Build başarısız olursa, durdurun ve düzeltin.

Faz 2: Static Analiz

Maven (yaygın plugin'ler):

bash
mvn -T 4 spotbugs:check pmd:check checkstyle:check

Gradle (yapılandırılmışsa):

bash
./gradlew checkstyleMain pmdMain spotbugsMain

Faz 3: Testler + Kapsam

bash
mvn -T 4 testmvn jacoco:report   # 80%+ kapsam doğrula# veya./gradlew test jacocoTestReport

Rapor:

  • Toplam testler, geçen/başarısız
  • Kapsam % (satırlar/dallar)

Unit Testler

Mock bağımlılıklarla izole olarak servis mantığını test edin:

java
@ExtendWith(MockitoExtension.class)class UserServiceTest {
  @Mock private UserRepository userRepository;  @InjectMocks private UserService userService;
  @Test  void createUser_validInput_returnsUser() {    var dto = new CreateUserDto("Alice", "[email protected]");    var expected = new User(1L, "Alice", "[email protected]");    when(userRepository.save(any(User.class))).thenReturn(expected);
    var result = userService.create(dto);
    assertThat(result.name()).isEqualTo("Alice");    verify(userRepository).save(any(User.class));  }
  @Test  void createUser_duplicateEmail_throwsException() {    var dto = new CreateUserDto("Alice", "[email protected]");    when(userRepository.existsByEmail(dto.email())).thenReturn(true);
    assertThatThrownBy(() -> userService.create(dto))        .isInstanceOf(DuplicateEmailException.class);  }}

Testcontainers ile Entegrasyon Testleri

H2 yerine gerçek bir veritabanına karşı test edin:

java
@SpringBootTest@Testcontainersclass UserRepositoryIntegrationTest {
  @Container  static PostgreSQLContainer<?> postgres = new PostgreSQLContainer<>("postgres:16-alpine")      .withDatabaseName("testdb");
  @DynamicPropertySource  static void configureProperties(DynamicPropertyRegistry registry) {    registry.add("spring.datasource.url", postgres::getJdbcUrl);    registry.add("spring.datasource.username", postgres::getUsername);    registry.add("spring.datasource.password", postgres::getPassword);  }
  @Autowired private UserRepository userRepository;
  @Test  void findByEmail_existingUser_returnsUser() {    userRepository.save(new User("Alice", "[email protected]"));
    var found = userRepository.findByEmail("[email protected]");
    assertThat(found).isPresent();    assertThat(found.get().getName()).isEqualTo("Alice");  }}

MockMvc ile API Testleri

Tam Spring context ile controller katmanını test edin:

java
@WebMvcTest(UserController.class)class UserControllerTest {
  @Autowired private MockMvc mockMvc;  @MockBean private UserService userService;
  @Test  void createUser_validInput_returns201() throws Exception {    var user = new UserDto(1L, "Alice", "[email protected]");    when(userService.create(any())).thenReturn(user);
    mockMvc.perform(post("/api/users")            .contentType(MediaType.APPLICATION_JSON)            .content("""                {"name": "Alice", "email": "[email protected]"}                """))        .andExpect(status().isCreated())        .andExpect(jsonPath("$.name").value("Alice"));  }
  @Test  void createUser_invalidEmail_returns400() throws Exception {    mockMvc.perform(post("/api/users")            .contentType(MediaType.APPLICATION_JSON)            .content("""                {"name": "Alice", "email": "not-an-email"}                """))        .andExpect(status().isBadRequest());  }}

Faz 4: Güvenlik Taraması

bash
# Bağımlılık CVE'lerimvn org.owasp:dependency-check-maven:check# veya./gradlew dependencyCheckAnalyze
# Kaynakta gizli bilgilergrep -rn "password\s*=\s*\"" src/ --include="*.java" --include="*.yml" --include="*.properties"grep -rn "sk-\|api_key\|secret" src/ --include="*.java" --include="*.yml"
# Gizli bilgiler (git geçmişi)git secrets --scan  # yapılandırılmışsa

Yaygın Güvenlik Bulguları

# System.out.println kontrolü (yerine logger kullan)grep -rn "System\.out\.print" src/main/ --include="*.java"
# Yanıtlarda ham exception mesajları kontrolügrep -rn "e\.getMessage()" src/main/ --include="*.java"
# Wildcard CORS kontrolügrep -rn "allowedOrigins.*\*" src/main/ --include="*.java"

Faz 5: Lint/Format (opsiyonel kapı)

bash
mvn spotless:apply   # Spotless plugin kullanıyorsanız./gradlew spotlessApply

Faz 6: Diff İncelemesi

bash
git diff --statgit diff

Kontrol listesi:

  • Debug logları kalmamış (System.out, koruma olmadan log.debug)
  • Anlamlı hatalar ve HTTP durumları
  • Gerekli yerlerde transaction'lar ve validation mevcut
  • Config değişiklikleri belgelenmiş

Çıktı Şablonu

DOĞRULAMA RAPORU===================Build:     [GEÇTİ/BAŞARISIZ]Static:    [GEÇTİ/BAŞARISIZ] (spotbugs/pmd/checkstyle)Testler:   [GEÇTİ/BAŞARISIZ] (X/Y geçti, Z% kapsam)Güvenlik:  [GEÇTİ/BAŞARISIZ] (CVE bulguları: N)Diff:      [X dosya değişti]
Genel:     [HAZIR / HAZIR DEĞİL]
Düzeltilecek Sorunlar:1. ...2. ...

Sürekli Mod

  • Önemli değişikliklerde veya uzun oturumlarda her 30-60 dakikada bir fazları yeniden çalıştırın
  • Kısa döngü tutun: hızlı geri bildirim için mvn -T 4 test + spotbugs

Unutmayın: Hızlı geri bildirim geç sürprizleri yener. Kapıyı sıkı tutun—production sistemlerinde uyarıları kusur olarak değerlendirin.

来源与署名

来源:affaan-m/ECC位于docs/tr/skills/springboot-verification提交ef648e0

许可证: 无许可证

内容归原作者所有。SourceWeft 从公开仓库中收录这些内容。

举报或申请下架