상세 컨텐츠

본문 제목

[TDD] Spock이란? [1/3]

Backend

by choiDev 2023. 12. 29. 00:57

본문

Spock은 BDD(Behavior Driven Development)를 위한 테스팅 프레임워크이며 Groovy 언어를 사용합니다.

Groovy언어란?
1. 자바에 파이썬, 루비, 스몰토크 등의 특징을 더한 동적 객체 지향 프로그래밍 언어이며
2. 자바 가상 머신에서 동작합니다.
3. 자바 프로그래머들이 큰 학습 없이도 빠르게 습득이 가능합니다.
4. 메타프로그래밍이 가능하다 (자기 자신 혹은 다른컴퓨터 프로그램을 데이터로 취급하며 프로그램을 작성 수정하는 행위) 즉 런타임에 수행해야할 작업의 일부를 컴파일 타임 동안 수행하는 프로그램을 말하기도 함
5. 자바에서 지원하는 리스트 맵 정규식을 위한 구문등도 제공해 자바와 언어 구조가 흡사하다
6. 자바 소스는 컴파일 이후 사용 가능하지만 그루비 소스는 스크립트 파일 그대로 실행가능하며 자바처럼 컴파일 하여 사용가능하다.
7. 대부분의 자바 코드는 파일 확장자만 바꾸면 수정없이 그루비에서 사용 가능하다.

SpringBoot에서 Junit이 아니여도 Spock을 통해 테스트 코드를 BDD관점으로 작성가능합니다.

Spock은 Block이라는 개념이 있는데 
(Given, When, Then)과 같은 코드 블록을 block이라고 통칭합니다. 
block의 종류는 아래와 같습니다

Block 명칭 설명
given 혹은 setup JUnit의 Given처럼 테스트에 필요한 환경을 설정하는 작업이 기재된 블록입니다 환경설정이니 다른블록보다 가장 먼저 호출됩니다.
when 테스트 코드의 결과를 변수에 담거나
에러가 발생하는게 테스트 시나리오라면 exception을 발생하는등의 실행 행위가 이뤄집니다.
then 테스트코드 결과 검증, 예외 및 조건에 대한 결과를 확인하는 블럭입니다.
expect 테스트할 코드 실행 및 검증 (when+then)이 한번에 이뤄지는 구조
cleanup 테스트가 마무리 되고 정리가 필요할때 사용할수 있습니다 
예시로 파일생성 테스트를 한경우 cleanup block에서 file.delete() 작업을 하거나 save한것을 delete하거나 등이라고 생각하시면됩니다.
where 일부 데이터만 바꿔가면서 여러번 테스트를 할수 있게 하는 영역입니다.
where block은 항상 method에서 마지막에 옵니다 

 

관련글 더보기