Spock를 활용한 테스트 코드 작성
기본 설정
1. 마우스 오른쪽 build.gradle 파일에서 Generate... - Add dependency... 클릭하면 아래와 같은 창이 나오는데 거기에 org.spockframework.spock를 검색 후 spock-core 찾고 testImplementation으로 변경해준 후 Add를 클릭한 후 2.3-groovy-3.0으로 선택하여 추가해준다
또한 위와 같이 org.cordhaus.groovy를 검색하여 testImplementation 'org.codehaus.groovy:groovy:3.0.0'도 추가.
spock는 groovy를 사용하기 때문에 plugin groovy도 추가해준다. 다시 마우스 오른쪽 Generate - Add gradle plugin을 클릭한 후 아래와 같이 나오면 groovy를 선택하여 추가해준다.
결과적으로 두 개의 dependency를 추가하고 한 개의 plugin을 추가해준다.
plugins {
id 'org.springframework.boot' version "${springBootVersion}"
apply plugin: 'groovy'
}
dependencies {
api project(':board-api')
implementation ("org.springframework.boot:spring-boot-starter-web:${springBootVersion}")
implementation("org.springframework.boot:spring-boot-starter-data-mongodb:${springBootVersion}")
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
testImplementation 'org.spockframework:spock-core:2.3-groovy-3.0'
testImplementation 'org.codehaus.groovy:groovy:3.0.6'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
}
그런데 기존에는 위와 같이 하면 된다고 되어있었는데 나의 경우 계속해서 에러가 나서 build.gralde 파일을 아래와 같이 변경해주었다.
plugins {
id 'org.springframework.boot' version "2.6.2"
id 'groovy'
}
dependencies {
api project(':board-api')
implementation ("org.springframework.boot:spring-boot-starter-web:2.6.2")
implementation("org.springframework.boot:spring-boot-starter-data-mongodb:2.6.2")
testImplementation("org.springframework.boot:spring-boot-starter-test:2.6.2")
testImplementation('org.spockframework:spock-core:2.3-groovy-3.0')
testImplementation('org.spockframework:spock-spring:2.3-groovy-3.0')
testImplementation('org.codehaus.groovy:groovy-all:3.0.0')
testImplementation('org.junit.jupiter:junit-jupiter-api')
testImplementation('org.junit.jupiter:junit-jupiter-engine:')
testImplementation('org.junit.jupiter:junit-jupiter')
testImplementation 'org.junit.platform:junit-platform-launcher'
testImplementation 'org.junit.vintage:junit-vintage-engine'
}
test{
useJUnitPlatform()
}
build.gradle 파일 수정후에는 반드시 다시 Relaod gradle project를 해주어야 한다.
2. 위와 같이 의존성을 주입해준후에는 테스트를 작성할 폴더를 생성한다. 해당 테스트 코드를 관리할 폴더를 src폴더의 하위에 new - Directory 후 gradle-source-sets 으로 되어 있는 부분에서 src/test/groovy를 입력하여 폴더를 생성한다. 해당 폴더 생성 후 해당 폴더의 하위에 다시 테스트 할 파일의 경로와 같게 폴더 경로를 만들어준다. 나의 경우 com/mihee/board 하위의 파일을 테스트하려 했기 때문에 groovy폴더 하위에 동일하게 new - groovy class를 클릭한 후 com.mihee.board.[파일명Test]로 테스트 파일을 생성하여 주었다.
3. 해당 클래스는 아래와 같이 spock에서 Specification을 상속받도록 한다.
import spock.lang.Specification
class BoardControllerTest extends Specification{
}
테스트하려는 코드 파일 - createBoard를 테스트할 계획이다.
작성한 test 코드
기본적으로 test 클래스 위에 @SpringBootTest 어노테이션을 붙여준다.
- def
자바스크립트에서 const 등과 같이 변수를 선언할 때 사용하는 명령어라고 할 수 있다.
- given
특정 코드를 테스트하기 위해 설정되어 있어야 할 기본 내용이라 할 수 있다. 예를 들어 특정 게시판 내용을 조회하는 서비스 로직을 테스트 하기 위해서는 적어도 한 개 이상의 게시글이 작성되어 있어야 한다. 나의 경우는 게시글 등록을 테스트 해보기 위해 게시글 샘플을 정의해두었다.
- when
실질적으로 테스트하려는 코드의 작성 부분이라 할 수 있다.
- then
when에 의한 코드 테스트 결과 내용을 세팅해두는 부분이다.
테스트 코드 작성시 기본 문법은 아래와 같다.
def "[테스트명]" () {
given:
when:
then:
}
'JAVA > Spring Boot' 카테고리의 다른 글
[ Spring Boot ] - 간단 스케줄링 작업하기 (0) | 2023.08.09 |
---|---|
[ Java ] - SMS 전송하기 (feat. naver cloud platform) (0) | 2023.05.17 |
[ Spring Boot ] - swagger 적용 (0) | 2023.05.15 |
[ Spring Boot ] - HTTP 요청 관련 어노테이션 (0) | 2023.04.29 |
[ Spring boot ] - intellij IDEA + gradle + jpa 프로젝트 생성하기(feat. rest api) (0) | 2022.11.19 |