리포지토리의 기본 메서드에 대한 테스트는 큰 의미가 없다.
검증을 마치고 제공된 것이기 때문
데이터베이스 연동 여부
- 데이터베이스를 제외시키기
- 테스트용 데이터베이스 사용하기
데이터베이스 저장 테스트
package com.springboot.test.data.repository;
import com.springboot.test.data.entity.Product;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
@DataJpaTest
public class ProductRepositoryTestByH2 {
@Autowired
private ProductRepository productRepository;
@Test
void saveTest() {
// given
Product product = new Product();
product.setName("펜");
product.setPrice(1000);
product.setStock(1000);
// when
Product savedProduct = productRepository.save(product);
// then
Assertions.assertEquals(product.getName(), savedProduct.getName());
Assertions.assertEquals(product.getPrice(), savedProduct.getPrice());
Assertions.assertEquals(product.getStock(), savedProduct.getStock());
}
}
@DataJpaTest
- JPA와 관련된 설정만 로드해서 테스트를 진행한다.
- @Transactional Annotation이 포함되어있어, 테스트 코드가 종료되면 데이터베이스의 롤백이 진행된다.
- 임베디드 데이터베이스를 사용한다. 다른 데이터베이스는 별도의 설정을 거쳐 사용이 가능하다.
데이터 조회 테스트
@Test
void selectTest() {
// given
Product product = new Product();
product.setName("펜");
product.setPrice(1000);
product.setStock(1000);
Product savedProduct = productRepository.saveAndFlush(product);
// when
Product foundProduct = productRepository.findById(savedProduct.getNumber()).get();
// then
Assertions.assertEquals(product.getName(), savedProduct.getName());
Assertions.assertEquals(product.getPrice(), savedProduct.getPrice());
Assertions.assertEquals(product.getStock(), savedProduct.getStock());
}
테스트 데이터베이스 설정하기
@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
public class ProductRepositoryTestByH2 {
}
replace의 기본 속성 값은 Replace.ANY이다. 이 경우 임베디드 메모리 데이터베이스를 사용한다.
속성값을 Replace.NONE으로 변경하면 실제 데이터베이스로 사용이 가능하다.
Uploaded by N2T
'Programming > [Spring Boot]' 카테고리의 다른 글
Gson (0) | 2023.03.16 |
---|---|
서비스 테스트 코드 작성 (0) | 2023.03.16 |
JPA save vs saveAndFlush (0) | 2023.03.16 |
Entity 관련 Annotation (0) | 2023.03.12 |
Lombok (0) | 2023.03.12 |