1. 序章

この短いチュートリアルでは、Spring Bootテストフレームワークのサポート力とSpockフレームワークの表現力を組み合わせる利点を示します。ユニットまたは統合テスト用です。

2. プロジェクトの設定

簡単なWebアプリケーションから始めましょう。 あいさつをしたり、あいさつを変更したり、単純なREST呼び出しでデフォルトにリセットしたりできます。  メインクラスとは別に、単純なRestControllerを使用して機能を提供します。

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

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

そのため、コントローラーは「Helloworld!」で挨拶します。 @RestControllerアノテーションとショートカットアノテーションはRESTエンドポイントの登録を保証します。

3. MavenスポックとSpring Bootテストの依存関係

まず、Mavenの依存関係を追加し、必要に応じてMavenプラグインの構成を追加します。

3.1. SpringサポートによるSpockフレームワークの依存関係の追加

スポック自体春のサポートには、2つの依存関係が必要です。

<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のロード

簡単なテストの1つは、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
    }
}

この統合テストでは、 ApplicationContext を起動する必要があります。これは、@SpringBootTestが行うことです。 Spockは、テストで「 when」、「 then」、「expect」などのキーワードを使用してセクションを分離します。

さらに、ここでのテストの最後の行として、 Groovy Truth を利用して、Beanがnullであるかどうかを確認できます。

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テスト(または仕様) では、慣れ親しんだSpring Bootテストフレームワークの使い慣れたアノテーションをすべて使用できることに注意してください。

6. 結論

この記事では、SpockとSpring Bootテストフレームワークを組み合わせて使用するようにMavenプロジェクトを設定する方法について説明しました。 さらに、両方のフレームワークが互いに完全に補完し合う方法を見てきました。

詳細については、 Spring Boot を使用したテスト、 Spockフレームワーク、およびGroovy言語に関するチュートリアルをご覧ください。

最後に、追加の例を含むソースコードは、GitHubリポジトリにあります。