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.SpockおよびSpringBootテストのMaven依存関係

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

3.1。SpringサポートによるSpockFrameworkの依存関係の追加

Spock自体とSpringサポートには、2つの依存関係が必要です。

 org.spockframework spock-core 1.2-groovy-2.4 test   org.spockframework spock-spring 1.2-groovy-2.4 test  

で指定されているバージョンは、使用されているgroovyバージョンへの参照であることに注意してください。

3.2。SpringBootテストの追加

Spring Boot Testのテストユーティリティを使用するには、次の依存関係が必要です。

 org.springframework.boot spring-boot-starter-test 2.2.2.RELEASE test 

3.3。Groovyのセットアップ

また、SpockはGroovyに基づいているため、テストでこの言語を使用できるようにするには、gmavenplusプラグインも追加して構成する必要があります

 org.codehaus.gmavenplus gmavenplus-plugin 1.6    compileTests    

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」などのキーワードを使用して、テストでセクションを分離します。

さらに、ここでのテストの最後の行として、GroovyTruthを利用して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テスト(または仕様)では、使い慣れたSpringBootテストフレームワークの使い慣れたアノテーションをすべて使用できることに注意することが重要です。

6.結論

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

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

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