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 .