베오
DCode
베오
전체 방문자
오늘
어제
  • 분류 전체보기 (218)
    • 공지사항 (1)
    • 잡설 (1)
    • Programming (33)
      • [C] (1)
      • [Java] (4)
      • [Python] (2)
      • [Android] (2)
      • [Network] (0)
      • [Operation System] (2)
      • [Spring Boot] (22)
      • [Docker] (0)
    • Algorithm (31)
      • 자료구조 (2)
      • 알고리즘 (Java) (14)
      • 알고리즘 (기초) (15)
    • Coding Test (131)
      • BOJ (131)
      • Algospat (0)
    • 이론적인거 (14)
      • 보안 (5)
      • 오류 해결 (2)
      • 디자인 패턴 (5)
      • 네트워크 (1)
      • 기타 (1)
    • 최신기술 (4)
      • 블록체인 (1)
    • [Project] (1)

블로그 메뉴

  • 🐈‍⬛ GitHub
  • 📫 방명록
  • 🔖 태그

공지사항

인기 글

티스토리

hELLO · Designed By 정상우.
베오

DCode

Programming/[Spring Boot]

리포지토리 테스트 코드 작성

2023. 3. 16. 10:24

리포지토리의 기본 메서드에 대한 테스트는 큰 의미가 없다.

검증을 마치고 제공된 것이기 때문

데이터베이스 연동 여부

  • 데이터베이스를 제외시키기
  • 테스트용 데이터베이스 사용하기


데이터베이스 저장 테스트

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
    'Programming/[Spring Boot]' 카테고리의 다른 글
    • Gson
    • 서비스 테스트 코드 작성
    • JPA save vs saveAndFlush
    • Entity 관련 Annotation
    베오
    베오

    티스토리툴바