🎓 Top 15 Udemy Courses (80-90% Discount): My Udemy Courses - Ramesh Fadatare — All my Udemy courses are real-time and project oriented courses.
▶️ Subscribe to My YouTube Channel (178K+ subscribers): Java Guides on YouTube
▶️ For AI, ChatGPT, Web, Tech, and Generative AI, subscribe to another channel: Ramesh Fadatare on YouTube
We will write a JUnit 5 test case for CRUD operations - Create, Read, Update and Delete.
YouTube Video
@DataJpaTest Annotation Overview
The Spring boot provides @DataJpaTest annotation. This annotation will disable full auto-configuration and instead apply only configuration relevant to JPA tests. By default, it will use an embedded, in-memory H2 database instead of the one declared in the configuration file, for faster test running time as compared to disk file database.1. Create Spring Boot Project
Use the below details in the Spring boot creation:
Project Name: spring-data-data-testing
Project Type: Maven
Choose dependencies: Spring Data JPA, H2 database, Lombok, Spring Boot Dev Tools
Package name: net.javaguides.springboot
2. Maven Dependencies
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
3. Create JPA Entity
package net.javaguides.springboot;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import jakarta.persistence.*;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
@Table(name = "employees")
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(name = "first_name", nullable = false)
private String firstName;
@Column(name = "last_name", nullable = false)
private String lastName;
@Column(name = "email", nullable = false)
private String email;
}4. Create Spring Data JPA Repository
The next thing we’re gonna do is create a repository to access a User’s data from the database.
The JpaRepository interface defines methods for all the CRUD operations on the entity, and a default implementation of the JpaRepository called SimpleJpaRepository.
package net.javaguides.springboot;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.Optional;
public interface EmployeeRepository extends JpaRepository<Employee, Long> {
Optional<Employee> findByEmail(String email);
}5. CRUD JUnit Tests for Spring Data JPA Repository
We need to specify the execution order because JUnit doesn’t run test methods in the order they appear in the code. So we need to use the @TestMethodOrder and @Order annotations to execute test cases in ascending order.
package net.javaguides.springboot;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.MethodOrderer;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestMethodOrder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.annotation.Rollback;
import javax.sql.DataSource;
import java.util.List;
import java.util.Optional;
@DataJpaTest
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class EmployeeRepositoryTests {
@Autowired
private EmployeeRepository employeeRepository;
// JUnit test for saveEmployee
@Test
@Order(1)
@Rollback(value = false)
public void saveEmployeeTest(){
Employee employee = Employee.builder()
.firstName("Ramesh")
.lastName("Fadatare")
.email("ramesh@gmail.com")
.build();
employeeRepository.save(employee);
Assertions.assertThat(employee.getId()).isGreaterThan(0);
}
@Test
@Order(2)
public void getEmployeeTest(){
Employee employee = employeeRepository.findById(1L).get();
Assertions.assertThat(employee.getId()).isEqualTo(1L);
}
@Test
@Order(3)
public void getListOfEmployeesTest(){
List<Employee> employees = employeeRepository.findAll();
Assertions.assertThat(employees.size()).isGreaterThan(0);
}
@Test
@Order(4)
@Rollback(value = false)
public void updateEmployeeTest(){
Employee employee = employeeRepository.findById(1L).get();
employee.setEmail("ram@gmail.com");
Employee employeeUpdated = employeeRepository.save(employee);
Assertions.assertThat(employeeUpdated.getEmail()).isEqualTo("ram@gmail.com");
}
@Test
@Order(5)
@Rollback(value = false)
public void deleteEmployeeTest(){
Employee employee = employeeRepository.findById(1L).get();
employeeRepository.delete(employee);
//employeeRepository.deleteById(1L);
Employee employee1 = null;
Optional<Employee> optionalEmployee = employeeRepository.findByEmail("ram@gmail.com");
if(optionalEmployee.isPresent()){
employee1 = optionalEmployee.get();
}
Assertions.assertThat(employee1).isNull();
}
}JUnit test for saveEmployee:
// JUnit test for saveEmployee
@Test
@Order(1)
@Rollback(value = false)
public void saveEmployeeTest(){
Employee employee = Employee.builder()
.firstName("Ramesh")
.lastName("Fadatare")
.email("ramesh@gmail.com")
.build();
employeeRepository.save(employee);
Assertions.assertThat(employee.getId()).isGreaterThan(0);
}
JUnit test for getEmployee:
@Test
@Order(2)
public void getEmployeeTest(){
Employee employee = employeeRepository.findById(1L).get();
Assertions.assertThat(employee.getId()).isEqualTo(1L);
}We have also used assertThat() method from AssertJ library for more readability than using JUnit’s assertion methods.
JUnit test for getListOfEmployees:
@Test
@Order(3)
public void getListOfEmployeesTest(){
List<Employee> employees = employeeRepository.findAll();
Assertions.assertThat(employees.size()).isGreaterThan(0);
}We have also used assertThat() method from AssertJ library for more readability than using JUnit’s assertion methods.
JUnit test for updateEmployee:
@Test
@Order(4)
@Rollback(value = false)
public void updateEmployeeTest(){
Employee employee = employeeRepository.findById(1L).get();
employee.setEmail("ram@gmail.com");
Employee employeeUpdated = employeeRepository.save(employee);
Assertions.assertThat(employeeUpdated.getEmail()).isEqualTo("ram@gmail.com");
}JUnit test for deleteEmployee:
@Test
@Order(5)
@Rollback(value = false)
public void deleteEmployeeTest(){
Employee employee = employeeRepository.findById(1L).get();
employeeRepository.delete(employee);
//employeeRepository.deleteById(1L);
Employee employee1 = null;
Optional<Employee> optionalEmployee = employeeRepository.findByEmail("ram@gmail.com");
if(optionalEmployee.isPresent()){
employee1 = optionalEmployee.get();
}
Assertions.assertThat(employee1).isNull();
}My Top and Bestseller Udemy Courses. The sale is going on with a 70 - 80% discount. The discount coupon has been added to each course below:
Build REST APIs with Spring Boot 4, Spring Security 7, and JWT
[NEW] Learn Apache Maven with IntelliJ IDEA and Java 25
ChatGPT + Generative AI + Prompt Engineering for Beginners
Spring 7 and Spring Boot 4 for Beginners (Includes 8 Projects)
Available in Udemy for Business
Building Real-Time REST APIs with Spring Boot - Blog App
Available in Udemy for Business
Building Microservices with Spring Boot and Spring Cloud
Available in Udemy for Business
Java Full-Stack Developer Course with Spring Boot and React JS
Available in Udemy for Business
Build 5 Spring Boot Projects with Java: Line-by-Line Coding
Testing Spring Boot Application with JUnit and Mockito
Available in Udemy for Business
Spring Boot Thymeleaf Real-Time Web Application - Blog App
Available in Udemy for Business
Master Spring Data JPA with Hibernate
Available in Udemy for Business
Spring Boot + Apache Kafka Course - The Practical Guide
Available in Udemy for Business

sir, please write test cases for controller layer for crud operations. please.
ReplyDelete