<TIL> 95. Test code, Spock

YUJIN LEE·2023년 4월 10일
0

개발log

목록 보기
89/149

테스트 코드

기능에 대한 불확실성을 감소, 개발자가 만든 기능을 안전하게 보호.

테스트 코드 작성은 개발 단계 초기에 문제 발견에 도움을 줘서 개발 시간을 단축시킨다.

Spock framework

Spock?

Groovy 언어를 이용해 테스트 코드를 작성할 수 있는 프레임워크.
JUnit과 비교해 코드를 더 간결하게 작성 가능

Groovy 언어는 동적 타입 프로그래밍 언어, JVM 위에서 동작해 Java문법과 유사

테스트 메소드 이름을 문자열로 작성 가능,
given, when, then 코드 블록을 명확히 구분

JUnit의 경우 주석으로 블록 구분, 메소드 이름 또한 제약사항 많이 존재

Spock 프레임워크 테스트 코드 작성 순서

  • 테스트 클래스는 Groovy 클래스로 생성, Specification 클래스 상속

  • feature(테스트 메서드는) def를 이용해 함수로 선언, 하나 이상 블록 존재해야 함

  • given 블록: 테스트에 필요한 값을 준비

  • when 블록: 테스트할 코드 실행

  • then 블록: when과 함께 사용, 예외 및 결과 값을 검증

  • expect 블록: then과 같으며 when을 필요로하지 않아 간단한 테스트 및 where과 같이 사용

  • where 블록: 데이터가 다르고 로직이 동일한 경우 동일한 테스트에 대한 중복 코드 제거 가능

  • setup() -> 모든feature 메소드 전에 실행된다.

JUnit에서 제공하는 주요 요소들은 모두 Spock에서 제공중.

TestContainers 사용 이유

JPA 이용해 CRUD 테스트 코드를 작성 시 어떤 DB환경으로?

  1. 운영환경과 유사한 스펙의 DB(개발환경 DB) 사용
    -> 테스트를 할때마다 다른 결과값이 나올 수 있다. -> test코드 신뢰X

  2. 인메모리 DB(ex. H2) 사용
    -> 독립적인 공간에서 테스트코드 실행. 메모리공간에서 실행되서 빠르다.
    운영환경과 달라서 데이터베이스에 특화된 테스트(ex. 격리레벨, 전파레벨) 등에 지장이 갈수도 있다.

  3. Docker 사용
    -> Docker compose를 꼭 작성해야함, test진행할때마다 컨테이너 정리또한 직접 관리해줘야함

  4. TestContainers 이용 -> 실무에서 가장 많이 사용
    -> 운영환경과 유사하면서도 독립적인 환경에서 테스트코드를 작성하고 테스트할 수 있다.

    -> TestContainers는 운영환경과 유사한 DB 스펙으로 독립적인 환경에서 테스트 코드를 작성해 테스트 가능 
    -> Java 언어만으로 docker container를 활용한 테스트 환경 구성 
    -> 도커를 이용해 테스트 시 컨테이너를 직접 관리해야하는 번거로움을 해결, 운영환경과 유사한 스펙으로 테스트 가능
    -> 즉, 테스트 코드가 실행 될 때 자동으로 도커 컨테이너를 실행하여 테스트하고, 테스트가 끝나면 자동으로 컨테이너 종료 및 정리. 
    -> TestContainers는 다양한 모듈 존재 

jdbc:이후 tc: 추가 -> host, port, database name 무시.
testcontainers가 제공해주는 드라이버가 자동으로 처리.
testcontainers 실행 위해서는 도커가 실행되어 있어야함.

Testcontainers for Java
Spock
mariaDB
GenericContainer
singleton testcontainers
jdbc support

profile
인정받는 개발자가 되고싶습니다.

0개의 댓글