Spock1.1の新機能紹介
SpockというGroovy言語で記述するテスティングフレームワークがあります。 今回は2017/05/01にリリースされたバージョン1.1の新機能のうち3つを紹介します。
本記事はG* Advent Calendar 2017の14日目です。
verifyAll メソッドによる(Soft Assert)
いろんな界隈で流行ってきているSoft AssertがついにSpockにも来ました。Integration Testにおいてはテストスクリプトもしくはライブラリ内で有用になる場面が多いこの機能。
Soft Assertというのは総称で、「複数の検査(assert)をグルーピングし、グループ内の検査が失敗してもグループ内の処理は全て実行してから、失敗を通知する」というものです。 これにより「あぁー、ここで失敗した場合には、この検査もしないと具体的にバグがわからないんだよなー」といって、テストコードを複雑にしてしまったり、デバッグ実行しながら変数の中身を確認するということを減らすことが出来ました。
Spockの場合は verifyAll
というメソッドで提供されていて、引数にクロージャを受け付けます。
使い方はthen
, expect
などの普段なら boolean
を返す行を連ねているところを verifyAll {}
で包むとできます。
class WhenUsingSoftAssert extends Specification { def "should continue assert in verifyAll"(){ expect: verifyAll { 1 == 1 2 == 3 // ここで失敗するけど、次行以降も評価される 3 == 3 4 == 5 } } }
where句のデータテーブルで左側の値を参照できる
Spockでは where句にテストの入出力をテーブル表記してパラメタライズテストをすることが出来ます。 このテーブルで左側の値を参照することが出来るようになりました。
使い方はwhere句のテーブルで現在列より左側の値はその変数名を記述するだけです。
lass WhenReadingTableLeftValue extends Specification { @Unroll def "should return left value in table"() { expect: x == y + z where: x | y | z 10 | 1 | 9 9 | x - 7 | 7 8 | 2 | x - y } }
@PendingFeatureで未実装機能マーカーでテストを実行しない
SpockのテストでTDD/BDD的にコードを書いていたり、テストコードをメモや要求のノート代わりに使っていると、未実装の振る舞いが存在する時間があります。
そのときにはそのフィーチャ(いわゆるテストメソッド)は @PendingFeature
でマークすることでテストがスキップされます。
既存の @Ignore
と異なるのでは、名前だけで @Ignore
は「実装されているんだけどなんらかの理由で無視する」という用途に使い、 @PendingFeature
は未実装だったり開発を中止しているものに使おうというものです。
@PendingFeature def "not implemented yet"() { ... }
その他
- Sprint Boot 1.4向けのアノテーション追加
- Spyをすでに存在するオブジェクトに対して使える
- Java 8の
default
メソッドをもっているinterface
に対してSpyを使える
- 作者: Dierk Konig,Paul King,Guillaume Laforge,Hamlet D'arcy,Cedric Champeau
- 出版社/メーカー: Manning Pubns Co
- 発売日: 2015/06/27
- メディア: ペーパーバック
- この商品を含むブログを見る
Gradle徹底入門 次世代ビルドツールによる自動化基盤の構築
- 作者: 綿引琢磨,須江信洋,林政利,今井勝信
- 出版社/メーカー: 翔泳社
- 発売日: 2014/11/07
- メディア: Kindle版
- この商品を含むブログ (2件) を見る