読者です 読者をやめる 読者になる 読者になる

No Programming, No Life

新しいNPNLです。http://d.hatena.ne.jp/fumokmm/ から引っ越してきました。

気になってたSpockを試してみた

Groovy!(挨拶)

はじめに

SpockはGroovy製のBDDフレームワークです。前から気になっていた*1ので是非試してみたいなと思っていたら、 id:backpaper0 さんが はじめてのSpock - 裏紙 で試していたので、私も試してみました。といってもやった内容はほぼコピペ。いわゆる手抜きってやつです。

試してみる

とりあえず、わざと失敗してみる (worldの!がない)
@Grab('org.spockframework:spock-core:0.5-groovy-1.7')
import spock.lang.*

class HelloSpec extends Specification {
  def '名前を呼んで挨拶する'() {
    expect: say(name) == message
    where:
      name      | message
      'world'   | 'Hello, world!'
      'fumokmm' | 'Hello, fumokmm'
  }
  
  def say = { "Hello, $it" }
}
結果
JUnit 4 Runner, Tests: 1, Failures: 1, Time: 23
Test Failure: 名前を呼んで挨拶する(HelloSpec)
Condition not satisfied:

say(name) == message
|   |     |  |
|   world |  Hello, world!
|         false
|         1 difference (92% similarity)
|         Hello, world(-)
|         Hello, world(!)
Hello, world

	at HelloSpec.名前を呼んで挨拶する(ConsoleScript5:6)

Result: org.junit.runner.Result@11e85928

分かりやすいなぁ。しかもシミラリティとかまで出してくるあたり、惚れるなぁ…。

修正版
@Grab('org.spockframework:spock-core:0.5-groovy-1.7')
import spock.lang.*

class HelloSpec extends Specification {
  def '名前を呼んで挨拶する'() {
    expect: say(name) == message
    where:
      name      | message
      'world!'  | 'Hello, world!'
      'fumokmm' | 'Hello, fumokmm'
  }
  
  def say = { "Hello, $it" }
}
結果
JUnit 4 Runner, Tests: 1, Failures: 0, Time: 40
Result: org.junit.runner.Result@3851ddd2

おわりに

今後はテストはSpockで書くよ!

*1:[http://d.hatena.ne.jp/fumokmm/20110417/1303052997:title=これ]のテストのところでも触れていたし。