Back to Repositories

Validating Spring Data JPA Repository Operations in spring-boot-examples

This test suite validates Spring Data JPA repository operations in a Spring Boot application. It covers essential database interactions including CRUD operations, custom SQL queries, and pagination functionality for User entities.

Test Coverage Overview

The test suite provides comprehensive coverage of UserRepository functionality, including basic CRUD operations, custom SQL queries, and pagination features.

  • Basic CRUD operations testing with user creation and retrieval
  • Custom SQL query validation for user modifications
  • Pagination and sorting implementation tests
  • Data persistence verification across different scenarios

Implementation Analysis

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

  • Resource injection for repository testing
  • Datetime formatting for user creation timestamps
  • PageRequest implementation for pagination testing
  • Sort ordering verification for result sets

Technical Details

  • Spring Boot Test framework
  • JUnit testing framework
  • Spring Data JPA for repository operations
  • Jakarta Persistence API annotations
  • Custom repository methods implementation
  • Pagination and sorting utilities

Best Practices Demonstrated

The test suite demonstrates several testing best practices for Spring Boot applications with database integration.

  • Isolated test methods for specific functionality
  • Proper resource cleanup and management
  • Comprehensive CRUD operation validation
  • Structured test organization with clear method naming
  • Effective use of Spring Boot test annotations

ityouknow/spring-boot-examples

spring-boot-jpa/spring-boot-jpa/src/test/java/com/neo/repository/UserRepositoryTests.java

            
package com.neo.repository;

import com.neo.model.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
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 jakarta.annotation.Resource;
import java.text.DateFormat;
import java.util.Date;

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

	@Resource
    private UserRepository userRepository;

	@Test
	public void testSave() {
		Date date = new Date();
		DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG);
		String formattedDate = dateFormat.format(date);
		
		userRepository.save(new User("aa", "aa123456","[email protected]", "aa",  formattedDate));
		userRepository.save(new User("bb", "bb123456","[email protected]", "bb",  formattedDate));
		userRepository.save(new User("cc", "cc123456","[email protected]", "cc",  formattedDate));

//		Assert.assertEquals(3, userRepository.findAll().size());
//		Assert.assertEquals("bb", userRepository.findByUserNameOrEmail("bb", "[email protected]").getNickName());
//		userRepository.delete(userRepository.findByUserName("aa"));
	}


	@Test
	public void testBaseQuery() {
		Date date = new Date();
		DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG);
		String formattedDate = dateFormat.format(date);
		User user=new User("ff", "ff123456","[email protected]", "ff",  formattedDate);
		userRepository.findAll();
		userRepository.findById(3L);
		userRepository.save(user);
		user.setId(2L);
		userRepository.delete(user);
		userRepository.count();
		userRepository.existsById(3L);
	}

	@Test
	public void testCustomSql() {
		userRepository.modifyById("neo",3L);
		userRepository.deleteById(3L);
		userRepository.findByEmail("[email protected]");
	}


	@Test
	public void testPageQuery()  {
		int page=1,size=2;
		Pageable pageable = PageRequest.of(page, size, Sort.by("id").descending());
		userRepository.findALL(pageable);
		userRepository.findByNickName("aa", pageable);
	}

}