10 Ratpack アプリケーションのテスト
Ratpackでは、テストは第一級オブジェクトとして扱われます。 ratpack-test
ライブラリはコアとなるサポートを提供し、 ratpack-groovy-test
はこれらの型に対してGroovy特有の簡潔な記法を提供します。
ratpack
とratpack-groovy
のGradleプラグインは、これらのライブラリをテストコンパイルクラスパスに暗黙的に追加します。
Ratpackのテストサポートは、使用されるテストフレームワークに依存しません。どのようなフレームワークでも潜在的に使用可能です。
多くのRatpackユーザーは、Spock テストフレームワークを使用しています。SpockはGroovyでテストを書く必要がありますが、Javaコードを効果的にテストするために容易に使用できます。
1.10 単体テスト
1.1.10 RequestFixture
RequestFixture
クラスは、モックされたリクエスト環境の作成を容易にし、表向きは Handler
実装のテストを目的としています。ただし、他のコンポーネント(例:Parser
実装)と統合するリクエストフィクスチャでアドホックハンドラを使用することも一般的です。
注:
GroovyRequestFixture
クラスは、リクエストフィクスチャを操作するためのGroovy特有の簡潔な記法を提供します。
2.1.10 ExecHarness
ExecHarness
フィクスチャは、アプリケーション外部でRatpackの実行メカニズムを活用するコードのテストを容易にします。Promise
を使用するコードを単体テストする必要がある場合は、ExecHarnessが必要です。
2.10 統合テスト
Ratpackの統合テストは、HTTPインターフェースを介してアプリケーションコンポーネントのサブセットをテストするテストです。
EmbeddedApp
フィクスチャは、実際のHTTPリクエストに応答するアドホックアプリケーションの構築を容易にします。統合テストのコンテキストでは、通常、テスト対象のアプリケーションコンポーネントの特定の組み合わせを結び付けるために使用されます。
実際のRatpackアプリケーションを構築するため、Renderer
、Parser
、ConfigurableModule
などのRatpack拡張ポイントの実装をテストするためにも使用できます。
EmbeddedApp
フィクスチャは、アプリケーションの起動と停止を管理し、埋め込みアプリケーションのリクエストを行うTestHttpClient
を提供します。
重要なことに、埋め込みアプリは、リソースを解放するために不要になったら閉じなければなりません。 EmbeddedApp
型は、java.io.AutoCloseable
インターフェースを実装しており、その close()
メソッドを使用してサーバーを停止できます。これは、JUnitの @After
メソッドなど、使用されているテストフレームワークの「テスト後」ライフサイクルイベントと組み合わせることができます。
注:
EmbeddedApp
フィクスチャは、Ratpack以外の他のタイプのアプリケーションをテストする際に、モックされたHTTPサービスを作成するために「スタンドアロン」で使用することもできます。
3.10 機能テスト
Ratpackの機能テストは、HTTPインターフェースを介してアプリケーション全体をテストするテストです。
Javaメインクラスとして定義されているRatpackアプリの場合、MainClassApplicationUnderTest
フィクスチャを使用できます。 Groovyスクリプトとして定義されているRatpackアプリの場合、GroovyRatpackMainApplicationUnderTest
フィクスチャを使用できます。
カスタムエントリポイントがある場合は、ServerBackedApplicationUnderTest
抽象スーパークラスをニーズに合わせて拡張できます。
これらのフィクスチャは、アプリケーションの起動と停止を管理し、埋め込みアプリケーションのリクエストを行う TestHttpClient
を提供します。
重要なことに、テスト対象のアプリケーションは、リソースを解放するために不要になったら閉じなければなりません。 CloseableApplicationUnderTest
型は、java.io.AutoCloseable
インターフェースを実装しており、その close()
メソッドを使用してサーバーを停止できます。これは、JUnitの @After
メソッドなど、使用されているテストフレームワークの「テスト後」ライフサイクルイベントと組み合わせることができます。
1.3.10 Impositions
Ratpackは、テスト容易性を高めるためにテスト対象のアプリケーションを拡張するメカニズムを提供します。これは impositions
と呼ばれます。
通常、impositions は MainClassApplicationUnderTest
などをサブクラス化し、addImpositions(ImpositionsSpec)
メソッドをオーバーライドすることによって指定されます。
2.3.10 ブラウザテスト
ブラウザテストは、Ratpackの TestHttpClient
の使用がブラウザの自動化に置き換えられることを除いて、ここで以前に機能テストと呼ばれていたものと同様に機能します。これは通常、MainClassApplicationUnderTest
を使用してアプリを起動および停止し、getAddress()
メソッドを介してテスト対象のアプリケーションのアドレスを提供することを含みます。
Ratpackユーザーは、Geb をブラウザテストによく使用します。その表現力豊かなスタイルと Spock との相乗効果が適しているためです。 ratpack.io
サイトのRatpack/Gebベースのテストの例は、参考として入手可能です.