Spring Boot TDD Workflow is a development claude skill built by Affaan M. Best for: Backend developers building Spring Boot microservices who want to ensure code quality and maintainability through comprehensive test coverage..
- What it does
- Execute test-driven development for Spring Boot services using JUnit 5, Mockito, and JaCoCo with 80%+ coverage.
- Category
- development
- Created by
- Affaan M
- Last updated
Spring Boot TDD Workflow
Execute test-driven development for Spring Boot services using JUnit 5, Mockito, and JaCoCo with 80%+ coverage.
Skill instructions
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. origin: ECC
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ışı
- Önce testleri yazın (başarısız olmalılar)
- Geçmek için minimal kod uygulayın
- Testleri yeşil tutarken refactor edin
- Kapsamı zorlayın (JaCoCo)
Unit Testler (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());
}
}
Desenler:
- Arrange-Act-Assert
- Kısmi mock'lardan kaçının; açık stubbing tercih edin
- Varyantlar için
@ParameterizedTestkullanın
Web Katmanı Testleri (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());
}
}
Entegrasyon Testleri (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());
}
}
Persistence Testleri (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
- 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
@DynamicPropertySourceile bağlayın
Kapsam (JaCoCo)
Maven snippet:
<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
jsonPathkullanın - Exception'lar için:
assertThatThrownBy(...)
Test Veri Builder'ları
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 testveyamvn verify - Gradle:
./gradlew test jacocoTestReport
Unutmayın: Testleri hızlı, izole ve deterministik tutun. Uygulama detaylarını değil, davranışı test edin.
Use this skill
Most skills are portable instruction packages. Claude Code supports SKILL.md directly. Other agents can use adapted files like AGENTS.md, .cursorrules, and GEMINI.md.
Claude Code
Save SKILL.md into your Claude Skills folder, then restart Claude Code.
mkdir -p ~/.claude/skills/spring-boot-tdd-workflow && curl -L "https://raw.githubusercontent.com/affaan-m/everything-claude-code/HEAD/docs/tr/skills/springboot-tdd/SKILL.md" -o ~/.claude/skills/spring-boot-tdd-workflow/SKILL.mdInstalls to ~/.claude/skills/spring-boot-tdd-workflow/SKILL.md.
Use cases
Backend developers building Spring Boot microservices who want to ensure code quality and maintainability through comprehensive test coverage.
Reviews
No reviews yet. Be the first to review this skill.
No signup required
Stats
Creator
AAffaan M
@affaan-m