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

springboot-tdd

Faz seu agente escrever testes para código Spring Boot usando ferramentas como JUnit e Mockito. É útil para garantir que o código funcione corretamente após mudanças.

O que ela faz

Este guia ajuda a criar testes para o seu código Spring Boot. Ele ensina a escrever testes antes do código principal, garantindo que tudo funcione corretamente e que o código esteja bem testado.

Quando usar

  • ✓Ao adicionar novas funcionalidades ao seu aplicativo.
  • ✓Ao corrigir erros no código existente.
  • ✓Ao organizar ou melhorar o código sem mudar o que ele faz.

Exemplo do que pedir para a IA

“Como posso escrever testes para a nova funcionalidade de login no meu aplicativo Spring Boot?”

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-tdd/SKILL.md

Mensagem pronta para colar

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

Você escreve testes que falham primeiro, depois cria o código mínimo para fazê-los passar. Por fim, você refatora o código enquanto os testes continuam passando e verifica se a cobertura de testes é alta.

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-tdd

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/springboot-tdd/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.

Fluxo de Trabalho TDD com Spring Boot

Orientação de TDD para serviços Spring Boot com mais de 80% de cobertura (unitária + integração).

Quando Usar

  • Novos recursos ou endpoints
  • Correções de bugs ou refatorações
  • Adicionando lógica de acesso a dados ou regras de segurança

Fluxo de Trabalho

  1. Escreva os testes primeiro (eles devem falhar)
  2. Implemente o código mínimo para passar
  3. Refatore com os testes verdes
  4. Garanta a cobertura (JaCoCo)

Testes Unitários (JUnit 5 + Mockito)

@ExtendWith(MockitoExtension.class)
class MarketServiceTest {
  @Mock MarketRepository repo;
  @InjectMocks MarketService service;

  @Test
  void createsMarket() {
    CreateMarketRequest req = new CreateMarketRequest("name", "desc", Instant.now(), List.of("cat"));
    when(repo.save(any())).thenAnswer(inv -> inv.getArgument(0));

    Market result = service.create(req);

    assertThat(result.name()).isEqualTo("name");
    verify(repo).save(any());
  }
}

Padrões:

  • Arrange-Act-Assert (Organizar-Agir-Afirmar)
  • Evite mocks parciais; prefira stubbing explícito
  • Use @ParameterizedTest para variantes

Testes de Camada Web (MockMvc)

@WebMvcTest(MarketController.class)
class MarketControllerTest {
  @Autowired MockMvc mockMvc;
  @MockBean MarketService marketService;

  @Test
  void returnsMarkets() throws Exception {
    when(marketService.list(any())).thenReturn(Page.empty());

    mockMvc.perform(get("/api/markets"))
        .andExpect(status().isOk())
        .andExpect(jsonPath("$.content").isArray());
  }
}

Testes de Integração (SpringBootTest)

@SpringBootTest
@AutoConfigureMockMvc
@ActiveProfiles("test")
class MarketIntegrationTest {
  @Autowired MockMvc mockMvc;

  @Test
  void createsMarket() throws Exception {
    mockMvc.perform(post("/api/markets")
        .contentType(MediaType.APPLICATION_JSON)
        .content("""
          {"name":"Test","description":"Desc","endDate":"2030-01-01T00:00:00Z","categories":["general"]}
        """))
      .andExpect(status().isCreated());
  }
}

Testes de Persistência (DataJpaTest)

@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@Import(TestContainersConfig.class)
class MarketRepositoryTest {
  @Autowired MarketRepository repo;

  @Test
  void savesAndFinds() {
    MarketEntity entity = new MarketEntity();
    entity.setName("Test");
    repo.save(entity);

    Optional<MarketEntity> found = repo.findByName("Test");
    assertThat(found).isPresent();
  }
}

Testcontainers

  • Use contêineres reutilizáveis para Postgres/Redis para espelhar a produção
  • Conecte via @DynamicPropertySource para injetar URLs JDBC no contexto Spring

Cobertura (JaCoCo)

Snippet Maven:

<plugin>
  <groupId>org.jacoco</groupId>
  <artifactId>jacoco-maven-plugin</artifactId>
  <version>0.8.14</version>
  <executions>
    <execution>
      <goals><goal>prepare-agent</goal></goals>
    </execution>
    <execution>
      <id>report</id>
      <phase>verify</phase>
      <goals><goal>report</goal></goals>
    </execution>
  </executions>
</plugin>

Asserções

  • Prefira AssertJ (assertThat) para legibilidade
  • Para respostas JSON, use jsonPath
  • Para exceções: assertThatThrownBy(...)

Construtores de Dados de Teste

class MarketBuilder {
  private String name = "Test";
  MarketBuilder withName(String name) { this.name = name; return this; }
  Market build() { return new Market(null, name, MarketStatus.ACTIVE); }
}

Comandos de CI

  • Maven: mvn -T 4 test ou mvn verify
  • Gradle: ./gradlew test jacocoTestReport

Lembre-se: Mantenha os testes rápidos, isolados e determinísticos. Teste o comportamento, não os detalhes de implementação.

Perguntas frequentes

O que é TDD?

TDD significa 'Desenvolvimento Guiado por Testes'. É uma técnica onde você escreve testes antes de escrever o código real.

Por que usar JUnit, Mockito e MockMvc?

São ferramentas que ajudam a escrever diferentes tipos de testes (unitários, de integração) de forma eficiente para aplicativos Spring Boot.

O que é 'cobertura de testes'?

É uma métrica que mostra qual porcentagem do seu código foi executada pelos testes. O objetivo é ter uma cobertura alta (acima de 80%) para garantir que a maior parte do código esteja testada.

Detalhes

Descrição original do autor

Test-driven development for Spring Boot using JUnit 5, Mockito, MockMvc, Testcontainers, and JaCoCo. Use when adding features, fixing bugs, or refactoring.

repo: affaan-m/ECC

Popularidade

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

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas