Spring

[Spring] Spock 프레임워크

코냥이 2023. 12. 29. 23:21

 

 

 

들어가기

 

Spock 프레임워크는 BDD를 위한 테스팅 프레임워크이다.

Spock 프레임워크에 대해 알아보기 전에 먼저, BDD란 무엇인지 알아보도록 하자 !

 

 

 

 

 

 

 

 

💡 BDD(Behavior-Driven Development) 란?


BDD(Behavior-Driven Development)
- 행동 주도 개발로, 사용자의 행위를 미리 예상하고 결과를 테스트하는 개발 방식이다.
- TDD에서 파생된 개발 방법론이다.

 

 

✔️ BDD 개발 절차

BDD는 Given-When-Then 세 가지로 테스트를 진행하는 정형화된 형식이 존재한다.

 

 

1. Given : 주어진 환경

  • 시나리오 상에서 주어진 환경을 정의한다.
  • 테스트에 필요한 환경을 설정하는 작업이다.
  • When, Then 보다 상위에 위치해야 한다.

 

 

2. When : 행위

  • 사용자가 어떤 행위를 하는 것을 정의한다.
  • 테스트 코드를 실행한다.

 

 

3. Then : 기대 결과

  • When에 대해 어떠한 결과를 정의한다.
  • 테스트 코드의 결과를 검증한다.

 

 

 

 

 

💡 Spock 프레임워크란?


Spock Framework
- BDD를 위한 테스팅 프레임워크로, groovy 언어를 사용한다.

 

  • JUnit과 비교하여 코드를 더 간결하게 작성이 가능하다.
  • groovy 언어는 JVM 위에서 동작하며, Java 문법과 유사하기 때문에 Java를 주로 사용했더라면 쉽게 사용할 수 있다.
  • 테스트 메소드 이름을 문자열로 작성할 수 있으며, given/when/then 코드 블록을 명확하게 구분할 수 있다.
    • JUnit의 경우, 주석으로 given/when/then 코드 블록을 구분하며, 메소드 이름에 제약 사항이 많다.

 

 

 

 

 

 

💡 Spock 예제


1. build.gradle 설정하기

Spock 프레임워크 사용을 위해 build.gradle에 의존성을 추가한다.

dependencies {
	// Spock
    testImplementation 'org.spockframework:spock-core:2.4-M1-groovy-4.0'
    testImplementation 'org.spockframework:spock-spring:2.4-M1-groovy-4.0'
}

 

 

2. 테스트 클래스 작성하기

시험 성적을 입력 받으면 기준에 맞는 등급을 출력하는 코드를 작성한다.

public class TestScore {

    public static String testScoreToGrade(int score) {
        String grade;

        if (score >= 90) grade = "A";
        else if (score >= 80) grade = "B";
        else if (score >= 70) grade = "C";
        else grade = "F";

        return grade;
    }
}

 

 

3. 테스트 코드를 작성한다.

프로젝트의 src -> test 디렉터리 하위에 groovy 클래스를 작성한다.

class TestScoreTest extends Specification{

    def "시험 성적을 등급으로 바꾸기"() {
        given: // 시험 성적이 89점일 때
        int score = 89;

        when: // 메소드 호출
        def result = TestScore.testScoreToGrade(score);

        then: // 결과 값이 "B"일 때 테스트 성공, 이외는 실패
        result == "B";
    }
}

 

 

4. 테스트하기

작성된 테스트 코드에서는 입력 값이 89이고, 기대 결과가 "B"이기 때문에 테스트 실행 시, 성공적일 것으로 예상된다.

 

 

테스트가 성공적으로 완료되었다 !

 

 

 

 

 

 

✔️ Tip

테스트 코드 실행 시, No tests found for given includes 에러가 발생한다면 다음과 같이 프로젝트 환경을 수정하면 해결된다.

 

프로젝트 Settings -> Build, Execution, Deployment -> Gradle -> Gradle projects 에서

설정을 InelliJ IDEA 로 바꿔주면 아마도(?) 해결이 될 것이다 !

 

 

 

 

 

 

 

출처

 

 

 

긴 글 읽어주셔서 감사합니다 🍀

잘못 작성된 내용은 피드백 주시면 반영하겠습니다 😎