SpringとSpockを使用したテスト
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フレームワークの依存関係の追加
<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リポジトリにあります。