Pular para o conteúdo
Skillpedia
Testes280 mil · #123

springboot-verification

Ajuda seu agente a verificar completamente um projeto Spring Boot. Ele executa testes, análises de segurança e de código, gerando um relatório final.

O que ela faz

Esta ferramenta verifica automaticamente se o seu código Spring Boot está pronto para ser enviado. Ela compila o código, analisa a qualidade, executa testes e verifica a segurança.

Quando usar

  • ✓Antes de enviar uma alteração (pull request).
  • ✓Após atualizar bibliotecas importantes.
  • ✓Antes de colocar o código em produção.

Exemplo do que pedir para a IA

“Verifique meu código Spring Boot antes de enviar.”

Quer saber mais? Abra as seções abaixo.

Como usar

O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.

Link da skill

https://github.com/affaan-m/ECC/blob/main/pi/core/skills/springboot-verification/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/affaan-m/ECC/blob/main/pi/core/skills/springboot-verification/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

Ela executa várias etapas: compilação, análise de código estático (qualidade), testes (unitários e de integração) e verificações de segurança. No final, ela gera um relatório indicando se tudo está 'Pronto' ou se há 'Problemas'.

Instalação

Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.

No terminal (Claude Code, Codex, Cursor), na pasta do projeto:

npx skills add affaan-m/ECC --skill springboot-verification

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/springboot-verification/SKILL.md -o SKILL.md
Conteúdo técnico (SKILL.md)

Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.

Loop de Verificação do Spring Boot

Execute antes de Pull Requests (PRs), após grandes mudanças e antes da implantação.

Quando Ativar

  • Antes de abrir um pull request para um serviço Spring Boot
  • Após refatorações importantes ou atualizações de dependências
  • Verificação pré-implantação para staging ou produção
  • Execução do pipeline completo: build → lint → test → security scan
  • Validação se a cobertura de testes atende aos limites

Fase 1: Build

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

Se o build falhar, pare e corrija.

Fase 2: Análise Estática

Maven (plugins comuns):

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

Gradle (se configurado):

./gradlew checkstyleMain pmdMain spotbugsMain

Fase 3: Testes + Cobertura

mvn -T 4 test
mvn jacoco:report   # verify 80%+ coverage
# or
./gradlew test jacocoTestReport

Relatório:

  • Total de testes, aprovados/reprovados
  • % de cobertura (linhas/ramos)

Testes de Unidade

Teste a lógica do serviço isoladamente com dependências mockadas:

@ExtendWith(MockitoExtension.class)
class UserServiceTest {

  @Mock private UserRepository userRepository;
  @InjectMocks private UserService userService;

  @Test
  void createUser_validInput_returnsUser() {
    var dto = new CreateUserDto("Alice", "alice@example.com");
    var expected = new User(1L, "Alice", "alice@example.com");
    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", "existing@example.com");
    when(userRepository.existsByEmail(dto.email())).thenReturn(true);

    assertThatThrownBy(() -> userService.create(dto))
        .isInstanceOf(DuplicateEmailException.class);
  }
}

Testes de Integração com Testcontainers

Teste contra um banco de dados real em vez de H2:

@SpringBootTest
@Testcontainers
class 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", "alice@example.com"));

    var found = userRepository.findByEmail("alice@example.com");

    assertThat(found).isPresent();
    assertThat(found.get().getName()).isEqualTo("Alice");
  }
}

Testes de API com MockMvc

Teste a camada de controller com o contexto Spring completo:

@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", "alice@example.com");
    when(userService.create(any())).thenReturn(user);

    mockMvc.perform(post("/api/users")
            .contentType(MediaType.APPLICATION_JSON)
            .content("""
                {"name": "Alice", "email": "alice@example.com"}
                """))
        .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());
  }
}

Fase 4: Verificação de Segurança

# Dependency CVEs
mvn org.owasp:dependency-check-maven:check
# or
./gradlew dependencyCheckAnalyze

# Secrets in source
grep -rn "password\s*=\s*\"" src/ --include="*.java" --include="*.yml" --include="*.properties"
grep -rn "sk-\|api_key\|secret" src/ --include="*.java" --include="*.yml"

# Secrets (git history)
git secrets --scan  # if configured

Achados Comuns de Segurança

# Verifique por System.out.println (use logger em vez disso)
grep -rn "System\.out\.print" src/main/ --include="*.java"

# Verifique por mensagens de exceção cruas em respostas

…
Perguntas frequentes

O que são testes de unidade e integração?

Testes de unidade verificam pequenas partes do código isoladamente. Testes de integração verificam como diferentes partes do código funcionam juntas, usando ferramentas como bancos de dados reais.

O que são análises estáticas?

São verificações automáticas que procuram por erros comuns de programação, má prática ou código que não segue o padrão definido, sem precisar executar o programa.

O que o relatório final mostra?

Ele resume o resultado de cada etapa (compilação, análise, testes, segurança) e indica se o código está pronto para ser enviado ou se precisa de correções.

Detalhes

Descrição original do autor

Run the full Spring Boot verification loop — Maven or Gradle build, SpotBugs, PMD, and Checkstyle static analysis, unit and Testcontainers integration tests with JaCoCo coverage, OWASP dependency and secret scans, and diff review — producing a pass/fail readiness report. Use when preparing a Spring Boot pull request, validating coverage thresholds, or running pre-deploy verification.

repo: affaan-m/ECC

Popularidade

Estrelas no GitHub
280 mil
Posição no ranking
#123
Licença
MIT
Atualizada em
15/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas