@DataJpaTest
JPA 관련 테스트 설정을 로드한다. 데이터소스 설정이 정상인지 JPA를 사용해서 생성, 수정, 삭제 등의 테스트를 할 수 있다. 실제 데이터베이스를 사용하지 않고 내장형을 사용해서 테스트할 수 있기 때문에 실제DB에 영향을 주지 않는다.
기본적으로 임베디드 데이터베이스를 사용한다.
// JPA테스트가 끝날때마다 자동으로 테스트에 사용한 데이터 롤백
@DataJpaTest
// Replace.Any를 사용하면 내장된 데이터 소스를 사용하고
// Replace.NONE을 설정하면 ActiveProfiles에 설정한 환경값에 따라 적용된다.
// spring.test.database.replace: NONE 도 가능
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE,
connection = EmbeddedDatabaseConnection.H2)
//@ActiveProfiles("dev")
public class JpaTest {
@AutoConfigureTestDatabase
Replace.Any를 사용하면 내장된 데이터소스를 사용한다.
Replace.None을 설정하면 @ActiveProfiles에 설정한 프로파일 환경값에 따라 데이터 소스가 적용된다.
@DataJpaTest는 JPA테스트가 끝날때마다 테스트 사용한 데이터를 롤백한다.
@AutoConfigureTestDatabase(connection=H2) 어노테이션으로 내장DB를 선택할 수 있다.
H2, Derby, HSQL 등이 있다.
Book.java
@Getter
@NoArgsConstructor
@Entity
@Table
public class Book {
@Id
@GeneratedValue
private Integer idx;
@Column
private String title;
@Column
private LocalDateTime publishedAt;
@Builder
public Book(String title, LocalDateTime publishedAt) {
this.title = title;
this.publishedAt = publishedAt;
}
}
BookRepository.java
public interface BookRepository extends JpaRepository <Book, Integer> {
}
JpaTest.java
@Autowired
private TestEntityManager testEntityManager;
@Autowired
private BookRepository bookRepository;
@Test
public void Book_saveTest() {
Book book = Book.builder().title("Spring Boot Test")
.publishedAt(LocalDateTime.now()).build();
testEntityManager.persist(book);
assertThat(bookRepository.getById(book.getIdx()), is(book));
}
@Test
public void Book_save_searchTest() {
Book book1 = Book.builder().title("Spring Boot Test Search1")
.publishedAt(LocalDateTime.now()).build();
Book book2 = Book.builder().title("Spring Boot Test Search2")
.publishedAt(LocalDateTime.now()).build();
testEntityManager.persist(book1);
testEntityManager.persist(book2);
List<Book> bookList = bookRepository.findAll();
assertThat(bookList, hasSize(2));
assertThat(bookList, contains(book1, book2));
}
@Test
public void Book_save_deleteTest() {
Book book1 = Book.builder().title("Spring Boot Test Search1")
.publishedAt(LocalDateTime.now()).build();
Book book2 = Book.builder().title("Spring Boot Test Search2")
.publishedAt(LocalDateTime.now()).build();
testEntityManager.persist(book1);
testEntityManager.persist(book2);
bookRepository.deleteAll();
assertThat(bookRepository.findAll(), IsEmptyCollection.empty());
}
TestEntityManager는 EntiryManager의 대체재로 만들어진 테스트용으로 기본적인 JPA테스트를 할 수 있다.
(persist, flush, find)
- Book_saveTest() : testEntityManager로 persist()기능 테스트
- Book_save_searchTest(): Book2개 저장 후 갯수 테스트, 해당 각체가 모두 포함되어있는지 테스트
- Book_save_deleteTest(): Book2개를 저장한 후 제대로 삭제 되었는지 테스트
참고레퍼런스
처음배우는 스프링 부트 2
http://www.yes24.com/Product/Goods/64584833
'Spring' 카테고리의 다른 글
@CookieValue 스프링 쿠키 사용법 (0) | 2022.05.25 |
---|---|
Spring Boot security Oauth2 로그인 연동 (구글/카카오) (1) | 2022.02.24 |
Spring Boot @EnableAutoConfiguration (0) | 2022.02.16 |
Spring Boot 외부 설정 @Value, @ConfigurationProperties (0) | 2022.02.16 |
Spring Boot 멀티 모듈 프로젝트 관리 (0) | 2022.02.15 |