Skip to content
intermediate Phase · Testing

Repository Testing

Test database access layers with embedded databases.

40m
0 problems
Topic Progress 0%

Repository Testing

Using Testcontainers

@SpringBootTest
class ProductRepositoryTest {

    @Container
    static PostgreSQLContainer<?> postgres = new PostgreSQLContainer<>("postgres:15")
        .withDatabaseName("testdb");

    @DynamicPropertySource
    static void configure(DynamicPropertyRegistry registry) {
        registry.add("spring.datasource.url", postgres::getJdbcUrl);
        registry.add("spring.datasource.username", postgres::getUsername);
        registry.add("spring.datasource.password", postgres::getPassword);
    }

    @Autowired
    private ProductRepository repository;

    @Test
    void shouldFindByCategory() {
        repository.save(new Product("Laptop", "electronics"));
        List<Product> result = repository.findByCategory("electronics");
        assertThat(result).hasSize(1);
    }
}

Testing Strategies

Testing Pyramid

     /  E2E  \
    /----------\
   / Integration \
  /----------------\
 /      Unit        \
/--------------------

Test Types

  • Unit: Individual components
  • Integration: Component interactions
  • E2E: Full user workflows
  • Performance: Load/stress testing

Best Practices

  • Write tests first (TDD)
  • Aim for 80% coverage
  • Test edge cases
  • Keep tests fast and isolated

Key Points

  • Understanding Repository Testing is essential for production systems
  • Always consider scalability and maintainability
  • Test thoroughly before deploying to production
  • Monitor performance and set up alerting

Common Patterns

  1. Validation: Always validate input at the boundary
  2. Error Handling: Use structured error responses
  3. Logging: Log key events for debugging
  4. Testing: Unit, integration, and load tests
  5. Documentation: Keep docs updated with code changes

Practice Problems

0 / 2 solved
Repository Testing Edge Cases

Identify and handle edge cases for Repository Testing. What happens under high load, with invalid input, or during failures?

Solution
// Edge case handling:
// 1. Null/empty input -> validation
// 2. High load -> rate limiting, queuing
// 3. Failures -> retries, circuit breaker
// 4. Concurrent access -> locks, idempotency
Repository Testing Testing Strategy

Write a testing strategy for Repository Testing. Include unit tests, integration tests, and performance tests.

Solution
// Test plan:
// - Unit: 80% coverage target
// - Integration: API contracts
// - Performance: latency, throughput
// - Chaos: failure injection

Quiz

1. Testcontainers provides?

Question 1 options

2. @DynamicPropertySource does?

Question 2 options

3. What is a common mistake when implementing Repository Testing?

Question 3 options

Flashcards

Question

Testcontainers?

Answer

Real databases in Docker for testing

Question

@DynamicPropertySource?

Answer

Overrides Spring properties at runtime

Question

Repository Testing best practices

Answer

Follow SOLID principles, write clean code, test thoroughly, document decisions, and monitor in production.

Revision Notes

Key Takeaways

  • 1. Testcontainers: real DB in Docker
  • 2. @DynamicPropertySource for config
  • 3. Test actual queries, not mocks
  • 4. Close to production environment

Interview Tips

  • Test repository layer
  • Use Testcontainers

Cheat Sheet

Repository Testing

  • Testcontainers: real DB in Docker
  • @DynamicPropertySource: runtime config
  • Test actual queries
  • Close to production