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 |
Tags
- pagination
- wappalyzer
- MYSQL에러
- windows10
- intellij
- Lombok
- restful api
- gradle
- MySQL시작하기
- Seek_Keyset
- DB생성
- SpringBoot
- K8S
- spring
- 우분투에war배포
- Java
- minikube
- VUE
- NullPointerException
- springMVC
- frontend
- CloutNative
- Postman
- SQL
- 스프링에러
- appleM1
- String
- 이클립스
- offset
- MySQL
Archives
- Today
- Total
미운 오리 새끼의 우아한 개발자되기
[Spring Boot] Cloud Native Java - Test(2) 슬라이스 - @DataJpaTest 본문
Spring & Spring Boot/Spring Boot
[Spring Boot] Cloud Native Java - Test(2) 슬라이스 - @DataJpaTest
Serina_Heo 2022. 9. 28. 15:09@DataJpaTest 를 사용하면 스프링 데이터 JPA를 사용하는 스프링부트 애플리케이션 테스트를 편리하게 작성할 수 있고, 스프링 데이터 JPA 테스트에 사용될 내장 인메모리 데이터베이스도 제공된다. @DataJpaTest 는 스프링 데이터 JPA 리포지토리를 테스트하는 데 사용되는 클래스만 자동 설정한다.
TestEntityManager 는 스프링 부트에서 제공해주는 편의 클래스인데 JPA의 엔티티 매니저에 테스트에서 자주 사용되는 구문과 몇 가지 유틸 메소드를 추가해서 만들어졌다. TestEntityManager 는 JPA 리포지토리 테스트에서 사용되는 컴포넌트로서 리포지토리를 사용하지 않고도 데이터 스토어에 객체를 저장할 수 있다. 아래 예제에서는 TestEntityManager 로 Account 인스턴스를 저장하고, 이 인스턴스를 accountRepository 에서 반환되는 값과 비교해서 테스트한다.
package demo.account;
import demo.customer.CustomerRepository;
import org.junit.Test;
import org.junit.runner.RunWith;
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.test.context.junit4.SpringRunner;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
@RunWith(SpringRunner.class)
@DataJpaTest
public class AccountRespositoryTest {
private static vinal AccountNumber ACCOUNT_NUMBER = new AccountNumber("098765432");
// 애플리케이션 컨텍스트에서 AccountRepository 를 주입받는다
@Autowired
private AccountRepository accountRepository;
// 리포지토리를 사용하지 않고 영속성을 관리할 수 있는 TestEntityManager 를 주입받는다
@Autowired
private TestEntityManager entityManager;
@Test
public void findUserAccountsShouldReturnAccounts() throws Exception {
// Account 엔티티를 인메모리 DB에 영속화 한다
this.entityManager.persist(new Account("jack", ACCOUNT_NUMBER));
// 영속화된 Account 엔티티를 조회한다
List<Account> account = this.accountRepository.findAccountsByUsername("jack");
assertThat(account).size().isEqualTo(1);
Account actual = account.get(0);
assertThat(actual.getAccountNumber()).isEqualTo(ACCOUNT_NUMBER);
assertThat(actual.getUsername()).isEqualTo("jack");
}
@Test
public void findAccountShouldReturnAccount() throws Exception {
this.entityManager.persist(new Account("jill", ACCOUNT_NUMBER));
Account account = this.accountRepository.findAccountByAccountNumber(ACCOUNT_NUMBER);
assertThat(account).isNotNull();
assertThat(account.getAccountNumber)).isEqualTo(ACCOUNT_NUMBER);
}
@Test
public void findAccountShouldReturnNull() throws Exception {
this.entityManager.persist(new Account("jack", ACCOUNT_NUMBER));
Account account = this.accountRepository.findAccountByAccountNumber(new AccountNumber("000000000"));
assertThat(account).isNull();
}
}
[Reference] Cloud Native Java - Josh Long, Kenny Bastani, 책만
'Spring & Spring Boot > Spring Boot' 카테고리의 다른 글
[Spring Boot] Cloud Native Java - Test(3) 스프링 클라우드 컨트랙트 (0) | 2022.09.29 |
---|---|
[Spring Boot] Cloud Native Java - Test(2) 슬라이스 - @RestClientTest (0) | 2022.09.28 |
[Spring Boot] Cloud Native Java - Test(2) 슬라이스 - @WebMvcTest (0) | 2022.09.27 |
[Spring Boot] Cloud Native Java - Test(2) 슬라이스 - @JsonTest (0) | 2022.09.27 |
[Spring Boot] Cloud Native Java - Test (1) 모의 기법 활용 (0) | 2022.09.27 |