任意のフィーチャーメソッドだけを実行する
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 }