Skip to content
Back to skills

Springboot Tdd Affaan M 2

ASecurity

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

  • 3 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 12, 2026
ai-agentsgojavaspringrefactoringgitapidatabase

Works with

  • api

Security analysis

A100/100

Scanned September 12, 2026

npx -y skills add thedixitjain/the-mega-skill-library --skill springboot-tdd--affaan-m-2 --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Springboot Tdd Affaan M 2?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Springboot Tdd  Affaan M 2
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/thedixitjain-springboot-tdd-affaan-m-2/badge)](https://www.skillsdirectory.com/skills/thedixitjain-springboot-tdd-affaan-m-2)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: springboot-tdd
description: "Test-driven development for Spring Boot using JUnit 5, Mockito, MockMvc, Testcontainers, and JaCoCo. Use when adding features, fixing bugs, or refactoring."
category: engineering-core
source_repo: affaan-m/ECC
source_path: "docs/tr/skills/springboot-tdd/SKILL.md"
source_url: https://github.com/affaan-m/ECC/blob/HEAD/docs/tr/skills/springboot-tdd/SKILL.md
---
# Spring Boot TDD İş Akışı

80%+ kapsam (unit + integration) ile Spring Boot servisleri için TDD rehberi.

## Ne Zaman Kullanılır

- Yeni özellikler veya endpoint'ler
- Bug düzeltmeleri veya refactoring'ler
- Veri erişim mantığı veya güvenlik kuralları ekleme

## İş Akışı

1) Önce testleri yazın (başarısız olmalılar)
2) Geçmek için minimal kod uygulayın
3) Testleri yeşil tutarken refactor edin
4) Kapsamı zorlayın (JaCoCo)

## Unit Testler (JUnit 5 + Mockito)

```java
@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());
  }
}
```

Desenler:
- Arrange-Act-Assert
- Kısmi mock'lardan kaçının; açık stubbing tercih edin
- Varyantlar için `@ParameterizedTest` kullanın

## Web Katmanı Testleri (MockMvc)

```java
@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());
  }
}
```

## Entegrasyon Testleri (SpringBootTest)

```java
@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());
  }
}
```

## Persistence Testleri (DataJpaTest)

```java
@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

- Production'ı yansıtmak için Postgres/Redis için yeniden kullanılabilir container'lar kullanın
- JDBC URL'lerini Spring context'e enjekte etmek için `@DynamicPropertySource` ile bağlayın

## Kapsam (JaCoCo)

Maven snippet:
```xml
<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>
```

## Assertion'lar

- Okunabilirlik için AssertJ'yi (`assertThat`) tercih edin
- JSON yanıtları için `jsonPath` kullanın
- Exception'lar için: `assertThatThrownBy(...)`

## Test Veri Builder'ları

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

## CI Komutları

- Maven: `mvn -T 4 test` veya `mvn verify`
- Gradle: `./gradlew test jacocoTestReport`

**Unutmayın**: Testleri hızlı, izole ve deterministik tutun. Uygulama detaylarını değil, davranışı test edin.

---

**Source:** [`affaan-m/ECC`](https://github.com/affaan-m/ECC) → `docs/tr/skills/springboot-tdd/SKILL.md`

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.