Bài viết này mình sẽ hướng dẫn mọi người cách test Repository trong Spring Boot với @DataJpaTest
- Để tiến hành test Repository trong SpringBoot trước hết ta phải thêm thư viện spring-boot-starter-test và com.h2database
testCompile group: ‘org.springframework.boot’, name: ‘spring-boot-starter-test’, version: ‘2.2.0.RELEASE’
testCompile group: ‘com.h2database’, name: ‘h2’, version: ‘1.4.200’
- Ta sẽ làm việc với entity là Category:
@Id
@GeneratedValue(strategy =GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String name;
- Sau đó tạo một repository như sau:
@Repository
public interface CategoryRepository extends JpaRepository<Category, Long> {
Category findByName(String categoryName);
}
- Đầu tiên ta tạo một class có tên là CategoryRepositoryTest trong src/test/java như sau:
@DataJpaTest
public class CategoryRepositoryTest {
@Autowired
private TestEntityManager entityManager;
@Autowired
private CategoryRepository categoryRepository;
@BeforeEach
void init() {
Category category = new Category();
category.setName(“Java”);
entityManager.persist(category);
entityManager.flush();
}
- Annoutation @DataJpaTest sẽ cung cấp cho ta một số cài đặt cần thiết cho việc test như là cấu hình in memory-database h2, cài đặt Hibernate, Spring Data, DataSource, …
- Và để thực hiện được việc test thì chúng ta cần phải có sẵn một số bản ghi, vì vậy chúng ta sử dụng đến TestEntityManager.
- Bây giờ chúng ta sẽ viết test case đầu tiên:
@DisplayName(“findByName can return a category has name Java”)
@Test
public void whenFindByName_thenReturnCategory () {
assertThat(categoryRepository.findByName(“Java”).getName()).isEqualTo(“Java”);
}
- Trong đoạn code trên assertThat() là một phương thức có sẵn trong thư viện AssertJ được đi kèm với dự án Spring Boot

Nhấn vào đây để chạy test case vừa viết