Testing with Spring and Spock

Тестирование с помощью Spring и Spock

1. Вступление

В этом коротком руководстве мы покажем преимущества сочетания поддерживающей мощностиSpring Boottesting framework и выразительностиSpock framework, будь то единица измерения илиintegration tests. .

2. Настройка проекта

Начнем с простого веб-приложения. Он может приветствовать, изменить приветствие и сбросить его до значения по умолчанию с помощью простых вызовов REST. Помимо основного класса, мы используем простойRestController для обеспечения функциональности:

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

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

Таким образом, контроллер приветствует «Привет, мир!». Аннотация@RestController иshortcut annotations обеспечивают регистрацию конечной точки REST.

3. MavenDependencies for Spock and Spring Boot Test

Мы начнем с добавления зависимостей Maven и, при необходимости, настройки плагинов Maven.

3.1. Добавление зависимостей Spock Framework с поддержкой Spring

ДляSpock itself и дляSpring support нам нужны две зависимости:


    org.spockframework
    spock-core
    1.2-groovy-2.4
    test



    org.spockframework
    spock-spring
    1.2-groovy-2.4
    test

Обратите внимание, что версии, указанные с, являются ссылкой на используемую версию Groovy.

3.2. Добавление Spring Boot Test

Чтобы использовать утилиты тестированияSpring Boot Test, нам нужна следующая зависимость:


    org.springframework.boot
    spring-boot-starter-test
    2.1.1.RELEASE
    test

3.3. Настройка Groovy

И поскольку Spock основан наGroovy,we have to add and configure the gmavenplus-plugin as well to может использовать этот язык в наших тестах:


    org.codehaus.gmavenplus
    gmavenplus-plugin
    1.6
    
        
            
                compileTests
            
        
    

Обратите внимание: поскольку Groovy нужен нам только для тестирования, мы ограничиваем цель плагинаcompileTest.

4. ЗагрузкаApplicationContext в тесте Спока

Один простой тест -check if all Beans in the Spring application context are created:

@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
    }
}

Для этого интеграционного теста нам нужно запуститьApplicationContext, что и делает за нас@SpringBootTest. Спок обеспечивает разделение разделов в нашем тесте такими ключевыми словами, как «when”then” или «expect”».

Кроме того, мы можем использоватьGroovy Truth, чтобы проверить, является ли компонент нулевым, в качестве последней строки нашего теста здесь.

5. Использование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 (или, скорее,Specifications) we can use all familiar annotations from the Spring Boot test framework that we are used to.

6. Заключение

В этой статье мы объяснили, как настроить проект Maven для использования Spock и тестовой среды Spring Boot вместе. Кроме того, мы увидели, как обе системы отлично дополняют друг друга.

Для более глубокого погружения ознакомьтесь с нашими руководствами оtesting with Spring Boot, оSpock framework и оGroovy language.

Наконец, исходный код с дополнительными примерами можно найти в нашемGitHub repository.