Spring/스프링 데이터 JPA
[스프링 데이터 JPA] 스프링 데이터 Common 1.레포지토리 (테스트)
주멘이
2021. 1. 16. 20:17
스프링 데이터 Common
- Repository: 단순 Marker용 Interface로 Repository 용도로 쓰일 것을 암시하는 것.
- CrudRepository: 기본적인 CRUD 기능들을 제공.
- PagingAndSortingRepository : Sort, Pageable findAll 메서드 제공
@NoRepositoryBean
spring data가 runtime시 bean을 이 어노테이션이 기입된 bean을 등록하지 않도록 방지하는 것
PostRepository에 사용자 메서드 추가
/**
* JPA의 기본적인 동작 원리와 빈 등록
*
* @Repository가 없어도 Bean으로 등록해 줌
* @EnableJpaRepositories 여기서부터 시작한다
* EnableJpaRepositories 안에 @Import(JpaRepositoriesRegistrar.class)로 시작해서
* RepositoryBeanDefinitionRegistrarSupport 이 implements ImportBeanDefinitionRegistrar(핵심) 하고
* @Override registerBeanDefinitions() method
*/
public interface PostRepository extends JpaRepository<Post, Long> {
Page<Post> findByTitleContains(String title, Pageable pageable);
long countByTitleContains(String title);
}
JPA 슬라이싱 테스트 코드
@DataJpaTest// slicing test using h2 database
class PostRepositoryTest {
@Autowired
PostRepository postRepository;
@Test
@Rollback(false) // @DataJpaTest의 @Transactional은 기본적으로 Rollback을 시킨다. 그러면 쿼리를 볼 수 없으니, Rollback=false로 설정한다.
public void crudRepositoryTest() {
//Given
Post post = new Post();
post.setTitle("hello spring boot common");
//When
assertThat(post.getId()).isNull(); // Transient status
Post save = postRepository.save(post);
//Then
assertThat(save.getId()).isNotNull();
//When
List<Post> all = postRepository.findAll();
//Then
assertThat(all.size()).isEqualTo(1);
assertThat(all).contains(save);
//When
Page<Post> postPage = postRepository.findAll(PageRequest.of(0, 10));
//Then
assertThat(postPage.getTotalElements()).isEqualTo(1);
assertThat(postPage.getNumber()).isEqualTo(0);
assertThat(postPage.getSize()).isEqualTo(10);
assertThat(postPage.getNumberOfElements()).isEqualTo(1);
//When
Page<Post> titleContains = postRepository.findByTitleContains("spring", PageRequest.of(0, 10));
//Then
assertThat(titleContains.getTotalElements()).isEqualTo(1);
assertThat(titleContains.getNumber()).isEqualTo(0);
assertThat(titleContains.getSize()).isEqualTo(10);
assertThat(titleContains.getNumberOfElements()).isEqualTo(1);
//When
long countByTitleContains = postRepository.countByTitleContains("spring");
//Then
assertThat(countByTitleContains).isEqualTo(1);
}
}