Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 테스트 코드
- 자바
- 원시 자료형
- 스네이크 케이스
- Array
- 비링크
- 공유락
- Entity
- Repository 테스트
- DTO
- 디자인 패턴
- springDataJpa
- Controller 테스트
- 마이크로서비스 아키텍처
- 비즈니스 로직
- OOP
- 트랜잭션 락
- Java
- 스터디
- do...while
- 파스칼 케이스
- 스프링 부트
- 배열
- @Version
- @Query
- jvm
- 낙관락
- 배타락
- 자료구조
- Service 테스트
Archives
- Today
- Total
menuhwang
[Spring Boot] Repository 단위 테스트 (3/5) 본문
Repository 단위 테스트
테스트 코드
@DataJpaTest
class BoardRepositoryTest {
private final String AUTHOR = "user";
private final String TITLE = "Hi";
private final String DESCRIPTION = "Nice to meet you";
private final int INIT_LIKE = 0;
@Autowired
private BoardRepository boardRepository;
@Test
public void saveTest() {
Board board = Board.builder()
.author(AUTHOR)
.title(TITLE)
.description(DESCRIPTION)
.build();
Board saved = boardRepository.save(board);
Board found = boardRepository.findById(saved.getId()).get();
assertNotNull(found.getId());
assertEquals(AUTHOR, found.getAuthor());
assertEquals(TITLE, found.getTitle());
assertEquals(DESCRIPTION, found.getDescription());
assertEquals(INIT_LIKE, found.getThumb());
assertNotNull(found.getCreated_timestamp());
}
}
@DataJpaTest
Repository 테스트에서는 DB에 정상적으로 변동 사항이 적용되는지 확인한다. @DataJpaTest 어노테이션 안에는 이를 도와주는 어노테이션이 포함되어있다.
@Transactional
테스트를 위해 저장되고 삭제되는 데이터들이 테스트 후에 남으면 안돼기때문에 @Transactional 어노테이션이 포함되어있다. 테스트를 마치면 최초 상태로 돌아가기 위해 rollback 된다.
@AutoConfigure~
JPA 관련 설정만 자동으로 불러온다. 기본적으로 embedded DB인 h2를 사용한다. 따라서 실제로 사용되는 DB에 영향을 미치지 않는다.
JPA 동작
@DataJpaTest로 인해 모든 test는 트랜잭션 적용됨.
board는 아직 영속성 컨텍스트에 올라가지 않은 new 상태.
boardRepository.save()를 실행하면 EntityManager.persist()로 인해 board는 managed 상태가 됨. (board = saved)
boardRepository.findById()를 실행하면 영속성 컨텍스트 1차 캐시에서 값이 있는지 확인.
(하나의 transaction이기 때문)
값이 있으면 DB까지 접근하지 않고 (sql문을 날리지 않고) 캐시에서 값을 가져옴.
'스터디 > Spring' 카테고리의 다른 글
[Spring Boot] Controller 단위 테스트 (5/5) (0) | 2022.09.08 |
---|---|
[Spring Boot] Service 단위 테스트 (4/5) (0) | 2022.09.08 |
[Spring Boot] TDD(Test-Driven-Development) (2/5) (0) | 2022.09.05 |
[Spring Boot] 테스트 코드 작성 이유 (1/5) (0) | 2022.09.05 |
[Spring Boot] DB (MySql) 사용 (0) | 2022.08.27 |
Comments