Spock でも JUnit4 のCategory と同じように 任意のテスト (フィーチャー) だけを実行することや逆にスキップすることができます。
方法は簡単です。
あらかじめ、Specification (テストクラス) もしくは フィーチャー (テストメソッド) に
好きなだけアノテーションをつけましょう。
あとは 設定ファイルに 実行したい (もしくはスキップしたい) アノテーションを
指定するだけです。
では、まずは アノテーションを作成しましょう。
今回は Java で作成しましたが、もちろん Groovy で作成しても OK です。
package com.bluepapa32;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
@interface Fast {}package com.bluepapa32;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
@interface Slow {}package com.bluepapa32;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
@interface Server {}
次に 作成したアノテーションを Specification (テストクラス) もしくは フィーチャー (テストメソッド) に付けましょう。
@Server
class HelloSpec extends Specification {
@Fast
def "a fast method"() {
expect: true
}
@Slow
def "a slow method"() {
expect: true
}
def "a neither fast nor slow method"() {
expect: true
}
}
後は 実行したいアノテーションとスキップしたいアノテーションを 次のように設定ファイルに設定するだけです。
import com.bluepapa32.*
runner {
include Server // 実行したいもの
exclude Fast, Slow // スキップしたいもの
}上記は @Server が付いた フィーチャーのうち @Fast と @Slow が付いていないものだけを実行するように設定しています。今回の場合だと "a neither fast nor slow method" だけが実行されることになります。
上記の設定は
- システムプロパティ spock.configuration に設定したファイル (例: -Dspock.configuration=MySpockConfig.groovy)
- クラスパス上の SpockConfig.groovy
- ${user.home}/.spock/SpockConfig.groovy
もし、Eclipse を利用しているのであれば 以下のように設定ファイルを作成しましょう。
まず、Specification クラス用のソースフォルダとは別のソースフォルダ (例えば src/test/resources) を作成します。
次に、その直下に SpockConfig.groovy を上記の内容で作成します。
最後に Groovy の設定の 『Compiler』 の 『Enable script foler support』 にチェックをいれます。
これは src/test/resources 配下の groovy ファイルが class ファイルにコンパイルされないようにするためです。
と言うのも SpockConfig.groovy ファイルは設定ファイルですので groovy ファイルのままクラスパス上にコピーされる必要があるからです。
ちなみに 設定ファイルには アノテーションの他にも実行したい Specification を直接指定することもできます。
上記の HelloSpec の Slow 以外のフィーチャーメソッドだけを実行したい場合は以下のように設定します。
import com.bluepapa32.*
runner {
include HelloSpec
exclude Slow
}