Test Strategy
test pyramid, integration vs unit, testcontainers
Test Strategy
A good test strategy is not “maximum integration tests”; it is a deliberate balance between unit, slice, and end-to-end tests.
1. Definition
The testing pyramid says you want many fast unit tests, fewer integration tests, and even fewer end-to-end tests. In Spring projects that is complemented by slice tests, which map nicely to framework layers.
2. Core Concepts
What happens underneath
The testing pyramid says you want many fast unit tests, fewer integration tests, and even fewer end-to-end tests. In Spring projects that is complemented by slice tests, which map nicely to framework layers.
When it is useful
A good test strategy is not “maximum integration tests”; it is a deliberate balance between unit, slice, and end-to-end tests. In interviews, highlight common use cases and the related Spring annotations.
What interviewers ask
Common questions cover Test Strategy trade-offs, debugging, and production pitfalls.
3. Practical Usage
- Use Test Strategy when the problem truly calls for it.
- Look at configuration and annotations together because both shape runtime behavior in Spring.
- During debugging always inspect startup logs, the bean graph, and active profiles.
- Prefer small components with clear responsibilities.
- In interviews, mention the production trade-off, not only the annotation name.
4. Code Examples
The following example demonstrates Test Strategy with real Spring annotations.
@Service
class PricingService {
BigDecimal calculateTotal(BigDecimal net, BigDecimal tax) {
return net.add(tax);
}
}
// unit test: no Spring context
// slice test: @WebMvcTest
// integration test: @SpringBootTest
Not every business rule needs a Spring context; a lot of value comes from fast unit tests.
5. Trade-offs
- Convention vs explicit configuration — Spring speeds development through convention, but sometimes explicit control is required for predictable behavior.
- Fast development vs transparency — Less boilerplate is good, but too much framework magic can make debugging harder.
- Abstraction vs control — Higher abstraction accelerates development, but you still need to understand low-level behavior.
6. Common Mistakes
- Memorizing annotations without understanding runtime behavior.
- Changing defaults without understanding the consequences.
- Keeping oversized components with weak boundaries.
- Ignoring logs and diagnostic tooling.
- Not aligning the test strategy with the specific layer.
7. Senior-level Insights
- A senior Spring engineer also looks at which proxy, bean post-processor, or filter is active under the hood.
- Most hard bugs are not about annotation names but about lifecycle and ordering.
- In production thinking, startup time, memory, observability, and rollback strategy all matter.
8. Glossary
- Test Strategy: A Spring concept or mechanism related to this topic.
- Bean: An object managed by Spring.
- Proxy: An intermediate object that can add behavior.
- Configuration: Properties or bean definitions that shape runtime behavior.
- Context: The current application container state in Spring.
9. Cheatsheet
- A good test strategy is not “maximum integration tests”; it is a deliberate balance between unit, slice, and end-to-end tests.
- Understand the underlying lifecycle.
- In interviews, mention the trade-off, not just the annotation.
- For production bugs, start with logs, bean graph, and active profiles.
- The simplest working solution is often the best one.
🎮 Games
8 questions