読者です 読者をやめる 読者になる 読者になる

亀岡的プログラマ日記

京都のベッドタウン、亀岡よりだらだらとお送りいたします。

Geb 公式チュートリアル読み解きシリーズ②: テストの書き方の基礎 #gebadvent

これは、Geb Advent Calendar 12/20 の記事です。

さて、前回書いた、Gebの公式チュートリアル解説の続きです。 今回は、テストメソッドの中身について、ざっと見ていきましょう。

見るべき場所は、geb-example-gradle/src/test/groovyディレクトリにある、以下のファイル群ですね。

  • GebishOrgHomePage.groovy
  • GebishOrgSpec.groovy
  • GebishOrgTest.groovy
  • MenuModule.groovy
  • TheBookOfGebPage.groovy

このファイル群をざっと分けると、

  • テストハーネスを利用したテスト本体
    • GebishOrgSpec.groovy (Spock)
    • GebishOrgTest.groovy (JUnit)
  • ページオブジェクト
    • GebishOrgHomePage.groovy
    • TheBookOfGebPage.groovy
  • モジュール
    • MenuModule.groovy

というような分類になります。 早速、それぞれを見てみましょう。

テストハーネス(フレームワーク

JUnit

まずは、JUnitを利用したテスト記述の部分です。 JUnitをGroovyから利用している状態ですね。

まず、最初の RunWith アノテーションで、実行するテストフレームワークを指定しています。 次に、 GebReportingTest を拡張したテストクラスを作成し、テストの記述を開始していますね。 あとは、通常の Test アノテーションを使っていけばいいわけです。

@RunWith(JUnit4)
class GebishOrgTest extends GebReportingTest {

    @Test
    void canGetToTheCurrentBookOfGeb() {
    }

}

この、 GebReportingTest は重要なテストクラスで、これを拡張することにより、各テストの最後でスクリーンショットを取るなど、Gebが提供する強力なレポート作成機能を利用することができます。

テストの中身自体は、以下のように assert 文で記述できますし、

 assert manualsMenu.links[0].text().endsWith("- CURRENT")

後ほど紹介するページオブジェクトの at アサーションも利用できます。

at TheBookOfGebPage

Spock

次は、Spockを利用したテスト記述です。 Gebを使うなら通常はこちらを利用することが多いですね。 Spockは、power assert をはじめ、強力なテスト記述能力をもったテストハーネスです。 詳しくは公式を色々眺めてみてください。

まずはフレーム部分から。

class GebishOrgSpec extends GebReportingSpec {

    def "can get to the current Book of Geb"() {
        when:

        and: 

        then:

        when:

        then:
    }
}

JUnitのようなアノテーションは不要で、 GebReportingSpec を拡張したクラスにメソッドを定義していくだけで、テスト記述として有効になっています。 あとは、Spockの特徴として、 given, when, thenステートメント利用した、振る舞い駆動的な書き方をしていきます。

あとは、アサーションとしては、

then: 
manualsMenu.links[0].text().endsWith("- CURRENT")

このように、 then の後に boolean を返す記述をすると、それだけでアサーションとみなしてくれます。

あとは、JUnitと同様、ページオブジェクトを利用した at アノテーションは勿論利用できます。

次回予告

本日はこれまで。 次回は、Gebのメイン機能であるページオブジェクトを中心に見ていきます!