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 服務開啟 pull request 之前、大型重構或相依性升級之後,或部署至預備環境或正式環境之前。也適合需要確認測試涵蓋率是否達到門檻,或執行從建置到安全掃描的完整流程時使用。
執行需求
需要一個使用 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 從公開儲存庫中收錄這些內容。

檢舉或申請下架