Groovy2.0で追加された@NotYetImplemented

元ネタ http://blog.andresteingress.com/2012/03/04/using-notyetimplemented-in-test-cases/

@NotYetImplementedとそのテストメソッドは失敗しなくてはいけなくて、逆に成功してしまうと検証エラーとして扱われるみたい。

class EchoService {

    def echo(arg) {
        // Not Yet Implemented
    }

}

というプロダクトコードがあって、以下の様なテスコトード。Spockでやってみた。

import groovy.transform.NotYetImplemented
import spock.lang.Specification

class NotYetImplementedSpec extends Specification {

    @NotYetImplemented
    def "失敗しないとダメ"() {
        given:
        def service = new EchoService()

        when:
        def result = service.echo('hello')

        then:
        result == 'hello'
    }

}

これを実行するとグリーンになる。この状態で実装してみる。

class EchoService {

    def echo(arg) {
        arg
    }

}

テスト実行する。成功してしまうと

junit.framework.AssertionFailedError: Method is marked with @NotYetImplemented but passes unexpectedly
	at org.yamkazu.NotYetImplementedSpec.失敗しないとダメ(NotYetImplementedSpec.groovy:8)

という感じ。

あと現時点(2012/7/6)でGroovy2.0でSpockを使う場合はSNAPSHOTバージョンを使う必要があります。
http://code.google.com/p/spock/wiki/SpockVersionsAndDependencies