Back to Repositories

Testing Spring Data JPA Repository Operations in springboot-labs

This test suite evaluates Spring Data JPA repository functionality with a focus on user data querying and pagination. It validates custom finder methods and temporal query operations using Spring Boot’s testing framework and JUnit.

Test Coverage Overview

The test suite covers essential JPA repository operations with a focus on user data retrieval.

  • Username-based query testing
  • Temporal query testing with pagination
  • Custom finder method validation
  • Page result handling and verification

Implementation Analysis

The implementation utilizes Spring Boot’s test framework with JUnit 4 for repository testing. The approach combines @SpringBootTest for full context loading with specific repository injection, enabling isolated testing of JPA query methods.

Key patterns include direct repository method testing and pagination handling using Spring Data’s Pageable interface.

Technical Details

  • Spring Boot Test framework
  • JUnit 4 testing infrastructure
  • Spring Data JPA repository patterns
  • PageRequest implementation for pagination
  • Date-based query testing

Best Practices Demonstrated

The test suite demonstrates several testing best practices for Spring Data JPA applications.

  • Proper test method isolation
  • Clear test method naming
  • Dependency injection in tests
  • Pagination implementation patterns
  • Date-based query testing approach

yudaocode/springboot-labs

lab-13-spring-data-jpa/lab-13-jpa/src/test/java/cn/iocoder/springboot/lab13/jpa/repository/UserRepository03Test.java

            
package cn.iocoder.springboot.lab13.jpa.repository;

import cn.iocoder.springboot.lab13.jpa.dataobject.UserDO;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.Calendar;
import java.util.Date;

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserRepository03Test {

    @Autowired
    private UserRepository03 userRepository;

    @Test
    public void testFindByUsername() {
        UserDO user = userRepository.findByUsername("yunai");
        System.out.println(user);
    }

    @Test
    public void testFindByCreateTimeAfter() {
        // 创建分页条件
        Pageable pageable = PageRequest.of(1, 10);
        // 执行分页操作
        Date createTime = new Date(2018 - 1990, Calendar.FEBRUARY, 24); // 临时 Demo ,实际不建议这么写
        Page<UserDO> page = userRepository.findByCreateTimeAfter(createTime, pageable);
        // 打印
        System.out.println(page.getTotalElements());
        System.out.println(page.getTotalPages());
    }

}