본문 바로가기

TIL

[TIL] 🌱 2023.05.09 - spock

🛹 목표

목표 난이도 달성 여부
패스트 캠퍼스 강의 듣기
✔️
알고리즘 문제풀이 ✔️

📋 공부 내용 & 기록

Spock 프레임워크

class SpockTest extends Specification {

    def "address 파라미터 값이 null이면, requestAddressSearch 메서드는 null을 리턴한다." () {
            given:
            String address = null

            when:
            def result = kakaoAddressSearchService.requestAddressSearch(address)

            then:
            result == null
    }
    
}
  • Spock란 Groovy 언어를 이용하여 테스트 코드를 작성할 수 있는 프레임워크이면 JUnit과 비교하여 코드를 더 간결하게 작성 가능
  • Groovy 언어는 동적 타입 프로그래밍 언어로 JVM 위에서 동작하며 Java 문법과 유사
  • 테스트 메서드 명은 문자열로 작성이 가능
  • JUnit의 경우 Given, When, Then 패턴을 (//Given  //When //Then)주석으로 구분하였지만, Spock는`:`를 사용하여 given, when, then 코드 블록을 명확히 구분할 수 있다.

Spock 사용하기

1. 디펜던시 설정하기

plugins {
    id 'java'
    id 'groovy'
}

dependencies {
    // spock
    testImplementation('org.spockframework:spock-core:2.1-groovy-3.0')
    testImplementation('org.spockframework:spock-spring:2.1-groovy-3.0')

    // 런타임에 클래스 기반 spock mock을 만들기 위해서 필요
    testImplementation('net.bytebuddy:byte-buddy:1.12.10')
}
  • plugins에 `id 'groovy'`를 추가
  • spock 관련 어노테이션 추가 

2. 테스트 디렉토리 내에 groovy 디렉토리 생성하기

3. 테스트 라이브러리는 Spock로 변경, Specification 클래스 상속(Spock로 테스트를 생성하면 자동으로 Specification이 상속됨) 그리고 Groovy 클래스로 생성하기

4.  테스트 코드 작성하기

  • feature(테스트 메서드)는 def를 이용하여 함수로 선언하며 하나 이상 블록이 존재해야 함.
  • 블록
    • given : 테스트에 피요한 값 준비
    • when : 테스트할 코드 실행
    • then : when과 함께 사용하며 예외 및 결과 값을 검증
    • expect : then과 같으며 when을 필요로 하지 않기 때문에 간단한 테스트 및 where와 같이 사용된다.
    • where : 데이터가 다르고 로직이 동일한 경우 동일한 테스트에 대한 중복 코드 제거 가능

Spock와 JUnit 비교[참고]

Fixture Methods

def setupSpec() {}    // runs once -  before the first feature method
def setup() {}        // runs before every feature method
def cleanup() {}      // runs after every feature method
def cleanupSpec() {}  // runs once -  after the last feature method
Spock JUnit
Specification Test Class
setup() @Before
cleanup() @After
setupSpec() @BeforeClass
cleanupSpec() @AfterClass
Feature Test
Feature method Test method
Data-driven feature Theory
Condition Assertion
Exception condition @Test(expected=   )
Interaction Mock expectation(e.g in Mockito)

참고하면 좋은 사이트

 

Spock 소개 및 튜토리얼

안녕하세요? 이번 시간엔 spock 에 대해 소개하는 시간을 가지려고 합니다. 모든 코드는 Github에 있기 때문에 함께 보시면 더 이해하기 쉬우실 것 같습니다. (공부한 내용을 정리하는 Github와 세미

jojoldu.tistory.com

 

Spock으로 테스트코드를 짜보자 | 우아한형제들 기술블로그

{{item.name}} Spock으로 테스트코드를 작성한 경험을 공유합니다. 안녕하세요! 우아한형제들 배달의민족/배민라이더스 주문시스템 팀 정용준입니다. 여러분은 어떻게 테스트 코드를 작성하고 계신

techblog.woowahan.com

 

'TIL' 카테고리의 다른 글

[TIL] 🌱 2023.05.11 - TestContainer  (0) 2023.05.11
[TIL] 🌱 2023.05.03 - Feign Client  (0) 2023.05.03
[TIL] 🌱 2023.04.26 - Async  (0) 2023.04.26
[TIL] 🌱 2023.04.25 - 상속과 컴포지션  (0) 2023.04.25
[TIL] 🌱 2023.04.24 - 멀티 모듈  (0) 2023.04.24