affaan-m/ECC

springboot-tdd

Desarrollo guiado por pruebas para Spring Boot usando JUnit 5, Mockito, MockMvc, Testcontainers y JaCoCo. Usar al agregar funcionalidades, corregir bugs o refactorizar.

72Collecting
See how to use itView GitHub source
npx skills add https://github.com/affaan-m/ECC --skill "docs/es/skills/springboot-tdd"
Automated source guideDocumentationStandard source

Source checked Jul 28, 2026·Refresh due Oct 26, 2026

Reorganized from the pinned upstream SKILL.md

Source-grounded documentation guide: springboot-tdd

Orientación TDD para servicios Spring Boot con 80%+ de cobertura (unit + integración).

npx skills add https://github.com/affaan-m/ECC --skill "docs/es/skills/springboot-tdd"
Check the pinned source

The pinned source supports a structured brief, but not an expanded tutorial. Only detected inputs, outputs, and sections are shown.

404 source words · 11 usable sections

Documentation workflow

Read springboot-tdd through these 4 source sections

Sections are extracted automatically from the pinned SKILL.md and link back to the source.

01

Cuándo Usar

Nuevas funcionalidades o endpoints

SKILL.md · Cuándo Usar
Nuevas funcionalidades o endpointsCorrecciones de bugs o refactorizacionesAgregar lógica de acceso a datos o reglas de seguridad
02

Flujo de Trabajo

1) Escribir pruebas primero (deben fallar) 2) Implementar el código mínimo para que pasen 3) Refactorizar con pruebas en verde 4) Exigir cobertura con JaCoCo

SKILL.md · Flujo de Trabajo
Escribir pruebas primero (deben fallar)Implementar el código mínimo para que pasenRefactorizar con pruebas en verde
03

Pruebas Unitarias (JUnit 5 + Mockito)

Patrones: - Arrange-Act-Assert - Evitar mocks parciales; preferir stubbing explícito - Usar @ParameterizedTest para variantes

SKILL.md · Pruebas Unitarias (JUnit 5 + Mockito)
Arrange-Act-AssertEvitar mocks parciales; preferir stubbing explícitoUsar @ParameterizedTest para variantes
04

Pruebas de Capa Web (MockMvc)

Review the “Pruebas de Capa Web (MockMvc)” section in the pinned source before continuing.

SKILL.md · Pruebas de Capa Web (MockMvc)
Review and apply the “Pruebas de Capa Web (MockMvc)” source section.

Documentation checklist

Verify each item before delivery

The source section “Cuándo Usar” has been checked.

The source section “Flujo de Trabajo” has been checked.

The source section “Pruebas Unitarias (JUnit 5 + Mockito)” has been checked.

The source section “Pruebas de Capa Web (MockMvc)” has been checked.

Choose a different workflow

When another Skill is the better fit

FAQ

What does the springboot-tdd source document cover?

Orientación TDD para servicios Spring Boot con 80%+ de cobertura (unit + integración).

How do I install springboot-tdd?

The source record exposes this install command: npx skills add https://github.com/affaan-m/ECC --skill "docs/es/skills/springboot-tdd". Inspect the command and pinned source before running it.

Repository stars
234,327
Repository forks
35,711
Quality
72/100
Source repository last pushed

Quality breakdown

Based on traceable docs and repository signals; stars are not treated as quality.

72/100
Documentation22/30
Specificity18/25
Maintenance20/20
Trust signals12/25
View original Skill.mdThis page is parsed directly from the repository SKILL.md without editorial rewriting. Collected: Jul 28, 2026 · about 1 min

Flujo de Trabajo TDD en Spring Boot

Orientación TDD para servicios Spring Boot con 80%+ de cobertura (unit + integración).

Cuándo Usar

  • Nuevas funcionalidades o endpoints
  • Correcciones de bugs o refactorizaciones
  • Agregar lógica de acceso a datos o reglas de seguridad

Flujo de Trabajo

  1. Escribir pruebas primero (deben fallar)
  2. Implementar el código mínimo para que pasen
  3. Refactorizar con pruebas en verde
  4. Exigir cobertura con JaCoCo

Pruebas Unitarias (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());
  }
}

Patrones:

  • Arrange-Act-Assert
  • Evitar mocks parciales; preferir stubbing explícito
  • Usar @ParameterizedTest para variantes

Pruebas de Capa 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());
  }
}

Pruebas de Integración (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());
  }
}

Pruebas de Persistencia (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

  • Usar contenedores reutilizables para Postgres/Redis que reflejen producción
  • Conectar mediante @DynamicPropertySource para inyectar URLs JDBC en el contexto de Spring

Cobertura (JaCoCo)

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

Aserciones

  • Preferir AssertJ (assertThat) para legibilidad
  • Para respuestas JSON, usar jsonPath
  • Para excepciones: assertThatThrownBy(...)

Builders de Datos de Prueba

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 o mvn verify
  • Gradle: ./gradlew test jacocoTestReport

Recuerda: Mantener las pruebas rápidas, aisladas y deterministas. Probar comportamiento, no detalles de implementación.

Source repo
affaan-m/ECC
Skill path
docs/es/skills/springboot-tdd/SKILL.md
Commit SHA
4e973d3eaf92
Repository license
MIT
Data collected