うさぎ組

ソフトウェア開発、チームによる製品開発、アジャイル、ソフトウェアテスト

Spock1.0でBDDとレポートが進化している! #gadvent

はじめに

これはG* Advent Calendarの2日目の記事です。今日はSpockの新機能について書きます。明日はRyotaMurohoshi さんの「初心者でも】やろうぜGroovy!〜Web APIたたいたり、レスポンスの中身確認したり、データを保存したり〜編【今すぐ使える】」です。

概要

2014/12現在、最高のユニットテスティングフレームワークであるSpockの次のメジャーバージョンである1.0の機能を紹介します。 BDDを強力にすすめるためのアノテーションと、最高にクールなテストレポーターが実装されました。個人的には本当に本当に素晴らしいリリースです。 はやくこい!!!!!

サンプルプロジェクト

サンプルプロジェクトをこちらにあげておきました。参考にしてみてください。 gradle testReportやgradlew testReportとしてみてください。テストが実行されて、build/reports/spock配下にレポートが生成されます。

Spockで利用できるアノテーション一覧

Spockでは様々なアノテーションが利用できますが、次の1.0で3つのアノテーションが追加されました。

  • AutoCleanup
  • FailsWith
  • Ignore
  • IgnoreIf
  • IgnoreRest
  • Issue
  • Narrative -> 1.0 New Feature!
  • Requires -> 1.0 New Feature!
  • See
  • Shared
  • Stepwise
  • Subject
  • Timeout
  • Title -> 1.0 New Feature!
  • Unroll

それぞれについて解説します。

1.0からの新アノテーションの解説

1.0からの新アノテーションは3つになります。基本的に

Title,Narrative

TitleとNarrativeは同じ機能で、単なるエイリアスです。クラスに宣言するアノテーションで、そのテストクラスがどのようなものであるかを説明する場所になります。 プロダクトコードだと、クラスヘッダコメントみたいな感じでしょうか。Cucumberを使っている人にはNarrativeです!で通じるかと思います。 このような感じで書きます。

@Narrative("""アプリケーションをインストールしたときのシナリオ。
インストール前後のチェック、
まずはじめに行うであろうこと、
また、今後も使いたくなるためのシナリオも用意する""")
class WhenInstalling extends Specification {
  // 略
}

Requires

これは@IgnoreIfの逆の意味になるアノテーションです。フィーチャにつけます。アノテーションの引数がtrueのときのみこのフィーチャを実行するという意味です。

@Requires({ os.windows })
def "I'll only run on Windows"() { ... }

レポーター

これを見よ!!動的に操作できるHTMLレポーターだ!

f:id:kyon_mm:20141202141058p:plain

  • NarrativeやGiven,When,Thenの説明が全てレポートに反映される
  • テストを文字列検索でフィルタリング出来る
  • パッケージ、クラス、フィーチャのネスト関係がインタラクティブに折りたためる

現在は煩雑な設定が必要になりますが、ちょちょっとコピペすればいいだけなので、試してみるといいと思います!

注意点

  • レポーターはまだUnrollに対応していません。
  • SNAPSHOT版なので、機能が変わることがあります。