MockMvc および Geb
前のセクションでは、MockMvc を WebDriver と使用する方法を説明しました。このセクションでは、ゲブ (英語) を使用して、テストを Groovy-er にします。
なぜ Geb と MockMvc なのでしょうか?
Geb は WebDriver によって支援されているため、WebDriver から得られるのと同じ利点を多く提供します。ただし、Geb は定型コードの一部を処理してくれるため、作業がさらに簡単になります。
MockMvc と Geb のセットアップ
次のように、MockMvc を使用する Selenium WebDriver で Geb Browser
を簡単に初期化できます。
def setup() {
browser.driver = MockMvcHtmlUnitDriverBuilder
.webAppContextSetup(context)
.build()
}
これは、MockMvcHtmlUnitDriverBuilder を使用する簡単な例です。より高度な使用箇所については、高度な MockMvcHtmlUnitDriverBuilder を参照してください。 |
これにより、サーバーとして localhost
を参照する URL が、実際の HTTP 接続を必要とせずに、MockMvc
インスタンスにリダイレクトされるようになります。他の URL は、通常どおりネットワーク接続を使用してリクエストされます。これにより、CDN の使用を簡単にテストできます。
MockMvc と Geb の使用箇所
これで、通常どおり Geb を使用できますが、アプリケーションをサーブレットコンテナーにデプロイする必要はありません。例: 次のメッセージを作成するためにビューをリクエストできます:
to CreateMessagePage
次に、フォームに入力して送信し、次のようにメッセージを作成します。
when:
form.summary = expectedSummary
form.text = expectedMessage
submit.click(ViewMessagePage)
認識されないメソッド呼び出し、プロパティアクセス、見つからない参照は、現在のページオブジェクトに転送されます。これにより、WebDriver を直接使用するときに必要な定型コードの多くが削除されます。
直接 WebDriver を使用する場合と同様に、これはページオブジェクトパターンを使用することにより、HtmlUnit テストの設計を改善します。前述のように、HtmlUnit および WebDriver でページオブジェクトパターンを使用できますが、Geb ではさらに簡単です。Groovy ベースの新しい CreateMessagePage
実装を検討してください。
class CreateMessagePage extends Page {
static url = 'messages/form'
static at = { assert title == 'Messages : Create'; true }
static content = {
submit { $('input[type=submit]') }
form { $('form') }
errors(required:false) { $('label.error, .alert-error')?.text() }
}
}
CreateMessagePage
は Page
を継承します。Page
の詳細については説明しませんが、要約すると、すべてのページに共通の機能が含まれています。このページが見つかる URL を定義します。これにより、次のようにページに移動できます。
to CreateMessagePage
また、指定されたページにいるかどうかを判断する at
クロージャーもあります。正しいページにいる場合は、true
が返されます。これが、次のように正しいページにいると断言できる理由です。
then:
at CreateMessagePage
errors.contains('This field is required.')
クロージャーでアサーションを使用して、間違ったページにいた場合に問題が発生した場所を判断できるようにします。 |
次に、ページ内のすべての関心領域を指定する content
クロージャーを作成します。jQuery 風の Navigator API (英語) を使用して、関心のあるコンテンツを選択できます。
最後に、次のように、新しいメッセージが正常に作成されたことを確認できます。
then:
at ViewMessagePage
success == 'Successfully created a new message'
id
date
summary == expectedSummary
message == expectedMessage
Geb を最大限に活用する方法の詳細については、ゲブの本 (英語) ユーザーマニュアルを参照してください。