1. 소개

이 짧은 튜토리얼에서 우리는 Spring Boot 의  테스트 프레임 워크 의 지원 능력 단위 테스트 용이든 통합 테스트 용이든  Spock 프레임 워크 의 표현력을 결합 할 때의 이점을 보여줄 것 입니다.

2. 프로젝트 설정

간단한 웹 애플리케이션부터 시작하겠습니다. 인사를하고 인사를 변경하고 간단한 REST 호출을 통해 기본값으로 재설정 할 수 있습니다. 메인 클래스 외에도 간단한 RestController 를 사용하여 기능을 제공합니다.

@RestController
@RequestMapping("/hello")
public class WebController {

    @GetMapping
    public String salutation() {
        return "Hello world!";
    }
}

그래서 컨트롤러는 'Hello world!'로 인사합니다. @RestController의 어노테이션과 바로 가기 어노테이션 나머지 엔드 포인트 등록을 확인합니다.

3. Spock 및 Spring Boot 테스트를위한 Maven  의존성

먼저 Maven 의존성을 추가하고 필요한 경우 Maven 플러그인 구성을 추가합니다.

3.1. Spring 지원으로 Spock 프레임 워크 의존성 추가

들어 스팍 자체 와 대한 Spring 지원 우리는 두 의존성이 필요합니다 :

<dependency>
    <groupId>org.spockframework</groupId>
    <artifactId>spock-core</artifactId>
    <version>1.2-groovy-2.4</version>
    <scope>test</scope>
</dependency>

<dependency>
    <groupId>org.spockframework</groupId>
    <artifactId>spock-spring</artifactId>
    <version>1.2-groovy-2.4</version>
    <scope>test</scope>
</dependency>

로 지정된 버전은 사용 된 그루비 버전에 대한 참조입니다.

3.2. 스프링 부트 테스트 추가

Spring Boot Test 의 테스트 유틸리티를 사용 하려면 다음 의존성이 필요합니다.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <version>2.4.0</version>
    <scope>test</scope>
</dependency>

3.3. Groovy 설정

스팍을 기반으로하기 때문에 그리고 그루비 , 우리는 추가하고 구성해야 gmavenplus 뿐만 아니라 -plugin  우리의 테스트에서이 언어를 사용할 수 있도록를 :

<plugin>
    <groupId>org.codehaus.gmavenplus</groupId>
    <artifactId>gmavenplus-plugin</artifactId>
    <version>1.6</version>
    <executions>
        <execution>
            <goals>
                <goal>compileTests</goal>
            </goals>
        </execution>
    </executions>
</plugin>

테스트 목적으로 Groovy 만 필요하므로 플러그인 목표를 compileTest로 제한합니다 .

4. Spock 테스트에서 ApplicationContext 로드

한 가지 간단한 테스트는 Spring 애플리케이션 컨텍스트의 모든 Bean이 생성되었는지 확인하는 것입니다 .

@SpringBootTest
class LoadContextTest extends Specification {

    @Autowired (required = false)
    private WebController webController

    def "when context is loaded then all expected beans are created"() {
        expect: "the WebController is created"
        webController
    }
}

이 통합 테스트를 위해 우리 는  @SpringBootTest가하는 일인 ApplicationContext 를 시작해야합니다 . Spock은 " when" , " then"  또는 " expect" 와 같은 키워드를 사용하여 테스트에서 섹션 구분을 제공합니다 .

또한 여기에서 테스트의 마지막 줄인 Groovy Truth이용  하여 빈이 null인지 확인할 수 있습니다.

5. Spock 테스트에서 WebMvcTest 사용

마찬가지로 WebController 의 동작을 테스트 할 수 있습니다 .

@AutoConfigureMockMvc
@WebMvcTest
class WebControllerTest extends Specification {

    @Autowired
    private MockMvc mvc

    def "when get is performed then the response has status 200 and content is 'Hello world!'"() {
        expect: "Status is 200 and the response is 'Hello world!'"
        mvc.perform(get("/hello"))
          .andExpect(status().isOk())
          .andReturn()
          .response
          .contentAsString == "Hello world!"
    }
}

Spock 테스트 (또는 스펙)  에서 익숙한 Spring Boot 테스트 프레임 워크 의 모든 익숙한 어노테이션을 사용할 수 있다는 점에 유의하는 것이 중요 합니다.

6. 결론

이 기사에서는 Spock과 Spring Boot 테스트 프레임 워크를 결합하여 사용하도록 Maven 프로젝트를 설정하는 방법을 설명했습니다. 또한 두 프레임 워크가 서로를 완벽하게 보완하는 방법을 확인했습니다.

더 자세히 알아 보려면 Spring Boot를 사용한 테스트 , Spock 프레임 워크Groovy 언어대한 자습서 를 참조하십시오 .

마지막으로 추가 예제가 포함 된 소스 코드는 GitHub 저장소 에서 찾을 수 있습니다 .