Back to Repositories

Testing JPA Specification Pagination and Filtering in spring-boot-examples

This test suite validates Spring Boot JPA Specification functionality with pagination and dynamic querying capabilities. It focuses on testing custom user detail search operations with complex filtering conditions and result sorting.

Test Coverage Overview

The test suite covers pagination and filtering functionality for UserDetail entities using Spring Data JPA Specifications.

Key areas tested include:
  • Dynamic query building with multiple conditions
  • Age range filtering
  • Custom text search on introduction field
  • Pagination implementation
  • Result sorting capabilities

Implementation Analysis

The testing approach utilizes Spring Boot’s test framework with JUnit4 integration. It implements @RunWith(SpringRunner.class) for Spring context loading and leverages @SpringBootTest for full application context testing.

Notable patterns include:
  • Resource injection for service layer testing
  • PageRequest implementation for pagination
  • Sort specification configuration
  • Parameter object usage for search criteria

Technical Details

Testing tools and configuration:
  • JUnit 4 testing framework
  • Spring Boot Test context
  • Spring Data JPA Specification
  • PageRequest for pagination handling
  • Sort class for result ordering
  • UserDetailParam for search criteria encapsulation

Best Practices Demonstrated

The test implementation showcases several testing best practices in Spring Boot applications.

Notable practices include:
  • Proper separation of concerns with service layer testing
  • Structured parameter object usage
  • Clear test method naming conventions
  • Efficient pagination implementation
  • Proper resource cleanup through Spring context management

ityouknow/spring-boot-examples

2.x/spring-boot-jpa/spring-boot-jpa/src/test/java/com/neo/repository/JpaSpecificationTests.java

            
package com.neo.repository;

import com.neo.model.UserDetail;
import com.neo.param.UserDetailParam;
import com.neo.service.UserDetailService;
import com.neo.service.UserDetailServiceImpl;
import org.junit.Test;
import org.junit.runner.RunWith;
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.data.domain.Sort;
import org.springframework.test.context.junit4.SpringRunner;

import javax.annotation.Resource;

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

	@Resource
	private UserDetailService userDetailService;

	@Test
	public void testFindByCondition()  {
		int page=0,size=10;
		Sort sort = new Sort(Sort.Direction.DESC, "id");
		Pageable pageable = PageRequest.of(page, size, sort);
		UserDetailParam param=new UserDetailParam();
		param.setIntroduction("程序员");
		param.setMinAge(10);
		param.setMaxAge(30);
		Page<UserDetail> page1=userDetailService.findByCondition(param,pageable);
		for (UserDetail userDetail:page1){
			System.out.println("userDetail: "+userDetail.toString());
		}
	}

}