Перейти к основному содержимому

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

· 3 мин. чтения

1. Введение

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

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

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

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

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

Итак, контроллер приветствует «Hello world!». Аннотация @RestController и аннотации ярлыков обеспечивают регистрацию конечной точки REST.

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

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

3.1. Добавление зависимостей Spock Framework с поддержкой 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>

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

3.2. Добавление весеннего загрузочного теста

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

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

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

А так как Spock основан на 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. Загрузка ApplicationContext в тесте Spock

Один простой тест — проверить, созданы ли все Bean-компоненты в контексте приложения 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 , чтобы проверить, является ли bean-компонент нулевым, как в последней строке нашего теста здесь.

5. Использование WebMvcTest в тесте Spock

Точно так же мы можем проверить поведение 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. Заключение

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

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

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