任意の条件でテストをスキップする
Spock にも JUnit4 の assumeThat のように ある条件の時だけ テストをスキップする機能が 0.5-groovy-1.8 で追加されています。
前回 のようにわざわざ設定を変更する必要がないので、環境に依存したテスト等には非常に便利です。
例えば、実行環境が Windows 以外の時だけ処理をスキップする (Windows のときだけ処理する) 場合は
package com.bluepapa32; import spock.lang.*; class HelloSpec extends Specification { @IgnoreIf({ properties['os.name'] !=~ /Windows.*/ }) def 'Windows の場合 ○○する'() { expect: true } }のように フィーチャーメソッドに @IgnoreIf を付けます。
@IgnoreIf の引数には 真偽値を返すクロージャを渡します。
クロージャが true を返した場合、処理をスキップします。
このクロージャ内では静的変数、静的メソッド もしくは 次の暗黙オブジェクトだけが使えます。
変数名 | 値 |
---|---|
properties | System プロパティ |
env | 環境変数 |
javaVersion | Java バージョン |
この @IgnoreIf は Annotation Driven Extensions という Spock の拡張機能を使って実現されているようです。
Annotation Driven Extensions は アノテーションを付けることで AOP のように処理を追加する機能です。
Junit の Rule に少し似ていますが、Rule よりも もう少し高機能なようです。まだ、ちゃんと調べていないですが...
JUnit の Rule も そうですが、アノテーションってこんなに使えるものなんですね。
工夫次第でいろいろと役に立つモジュールができそうですね。
これはテストコードだけでなくプロダクトコードにも ぜひ 活用してみたいですね。