Specs2のParameterized Testのはなし
はー、TDD Advent Calendar 2012の15日目ですねー。
誘われたのはいいけど特に書くことないなー、なにかないかなーと考えていたらタイムリミットが近づいてきて胃が痛くなってきたので、とりあえずダミー記事をあげておきます。いつか本物の記事がupされるかもしれません(フラグ)これもアリかなということで小ネタ。
SpockのParameterized Testあるよね
こんな感じの。
import spock.lang.Specification import spock.lang.Unroll class HogeSpock extends Specification { @Unroll def "fizzBuzzへの入力値が #num の時は #res が返される"() { def sut = new HogeJava() expect: sut.fizzBuzz(num) == res where: num | res 1 | "1" 2 | "2" 3 | "Fizz" 4 | "4" 5 | "Buzz" 6 | "Fizz" 7 | "7" 8 | "8" 9 | "Fizz" 10 | "Buzz" 11 | "11" 12 | "Fizz" 13 | "13" 14 | "14" 15 | "FizzBuzz" } }
きれいだねーそうだねー。
Specs2も似たような書き方がある
あるらしいですよ奥さん。
import org.specs2.mutable.Specification import org.specs2.matcher.DataTables class FizzBuzzSpec extends Specification with DataTables { "FizzBuzz" should { "入力値に対応する文字列が返る" in { "num" | "res" | 1 ! "1" | 2 ! "2" | 3 ! "Fizz" | 4 ! "4" | 5 ! "Buzz" | 6 ! "Fizz" | 7 ! "7" | 8 ! "8" | 9 ! "Fizz" | 10 ! "Buzz" | 11 ! "11" | 12 ! "Fizz" | 13 ! "13" | 14 ! "14" | 15 ! "FizzBuzz" |> { (num, res) => fizzBuzz(num) must_== res } } } }
ほえー
試しに間違えてみる
6と15の期待値を間違えてテストしてみる。
FizzBuzz should | num | res | + | 1 | 1 | + | 2 | 2 | + | 3 | Fizz | + | 4 | 4 | + | 5 | Buzz | x | 6 | Fiz | 'Fizz' is not equal to 'Fiz' + | 7 | 7 | + | 8 | 8 | + | 9 | Fizz | + | 10 | Buzz | + | 11 | 11 | + | 12 | Fizz | + | 13 | 13 | + | 14 | 14 | x | 15 | FizzBuz | 'FizzBuzz' is not equal to 'FizzBuz' ...
へーほー。ちなみに2要素以上でないと使えません。
まとめ
この記事について?特になし。
明日は北のほうまでとんで@shuji_w6eさんです。