ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 10장 - 데이터베이스 테스트
    테스트코드(Test Code)/단위테스트 - 생산성과품질을위한 단위테스트원칙과패턴 2023. 8. 17. 00:01

    10장에서 다루는 내용

    • 데이터베이스 테스트를 위한 전제 조건
    • 데이터베이스 테스트 모범 사례
    • 테스트 데이터 생명 주기
    • 테스트 내 데이터베이스 트랜잭션 관리

     

    데이터베이스 테스트를 위한 전제 조건

    목을 사용하지 않으면 테스트하기 힘들 수 있습니다.

    • 데이터베이스를 형상 관리 시스템에 유지
      • Git과 같은 형상 관리 시스템에 데이터베이스를 저장하는 것이 최선이다. (예시: Flyway)
      • 그렇지 않다면 버그 재현을 위해 과거의 특정 시점으로 되돌리기 어렵다.
    • 참조 데이터도 데이터베이스 스키마다
      • 애플리케이션이 데이터를 수정할 수 있으면 일반 데이터이며, 그렇지 않으면 참조 데이터이다.
      • 애플리케이션이 참조 데이터를 수정하지 못하게 해야한다.
    • 개발자마다 별도의 데이터베이스 인스턴스를 활용

     

    데이터베이스 트랜잭션 관리

    트랜잭션관리는 제품 코드와 테스트 코드 모두에 중요합니다.

    이를 통하여 데이터베이스의 원자성을 잘 지켜주어야 합니다.

    Spring에서는 @Transactional 사용하면 된다.

     

    테스트 데이터 생명 주기

    • 테스트를 순차적으로 실행
    • 테스트 실행 간에 남은 데이터를 제거

    모든 테스트 데이터가 고유한지, 남은 데이터를 정리하기 등으로 병렬 테스트를 수행하기 위해서는 큰 비용이 든다.

    도커 컨테이너를 만들어하는 방안도 있지만 책에서는 비추천한다.

     

    테스트 간 데이터 제거는 @BeforeEach, @AfterEach 등을 활용할 수 있다.

     

    인메모리 데이터베이스 지양

    • 빠르지만 실제 데이터베이스와 다르기 때문에 일관성이 떨어지게 되고 사용하지 않는 것이 좋습니다.

     

    테스트 구절 코드 재사용

    • 짧은 테스트라도 서로 의존하지 않도록 해야 한다.
    • 헬퍼 클래스 활용

     

    읽기 테스트를 해야 하는가?

    • 쓰기를 테스트하는 것은 매우 중요합니다. 
    • 복잡하거나 중요한 읽기 작업만 테스트하고 나머지는 무시하라.
    • 굳이 읽기 테스트가 아니더라도 비슷하게 목 체계가 너무 복잡해서 유지비가 너무 많이 들고, 회귀 방지의 이점이 적다면 하지 마라

    댓글

Designed by Tistory.