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ベースのテストの例は、参考として入手可能です.