Рубрики
Без рубрики

Тестирование с помощью пружины и амортизатора

Узнайте, как использовать Spock для тестирования приложения Spring

Автор оригинала: Jan Hauer.

1. введение

В этом коротком уроке мы покажем преимущества сочетания поддержки платформы тестирования Spring Boot и выразительности платформы Spock, будь то для модульных или интеграционных тестов .

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

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

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

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

Поэтому контроллер приветствует вас словами ” Привет, мир!”. Аннотация @RestController и аннотации ярлыков обеспечивают регистрацию конечной точки REST.

3. Зависимости Maven для теста Spock и Spring Boot

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

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

Для самого Спока и для поддержки пружины нам нужны две зависимости:


    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 , нам нужна следующая зависимость:


    org.springframework.boot
    spring-boot-starter-test
    2.4.0
    test

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

И поскольку Спок основан на Groovy , мы также должны добавить и настроить gmavenplus -плагин , чтобы иметь возможность использовать этот язык в наших тестах:


    org.codehaus.gmavenplus
    gmavenplus-plugin
    1.6
    
        
            
                compileTests
            
        
    

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

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

Один простой тест состоит в том, чтобы проверить, созданы ли все компоненты в контексте приложения Spring :

@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/|. Спок обеспечивает разделение разделов в нашем тесте с помощью таких ключевых слов, как “ когда” , “ тогда” или “ ожидайте” .

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

5. Использование веб-теста Mvc в тесте Спока

Аналогично, мы можем проверить поведение Веб-контроллера :

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

Важно отметить, что в наших тестах Спока (или, скорее, Спецификации) мы можем использовать все знакомые аннотации из Spring Boot test framework , к которым мы привыкли.

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

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

Для более глубокого погружения ознакомьтесь с нашими учебными пособиями по тестированию с помощью Spring Boot, о фреймворке Spock и о языке Groovy .

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