練習でGroovy&SpockでFizzBuzzを書いてみました。
FizzBuzzSpec.groovy
import spock.lang.*; class FizzBuzzSpec extends Specification { def fizzbuzz def setup(){ fizzbuzz = new FizzBuzz() } def '3の倍数を受け取るとFizzを返す'(){ expect: fizzbuzz.says(number) == "Fizz" where: number<<[3, 6] } def '5の倍数を受け取るとBuzzを返す'(){ expect: fizzbuzz.says(number) == "Buzz" where: number<<[5, 10] } def '15の倍数を受け取るとFizzBuzzを返す'(){ expect: fizzbuzz.says(number) == "FizzBuzz" where: number<<[15, 30] } def '1を受け取ると1を返す'(){ expect: fizzbuzz.says(1) == "1" } }
FizzBuzz.groovy
class FizzBuzz{ def says(number){ if (number%15 == 0) return "FizzBuzz" else if (number%3 == 0) return "Fizz" else if (number%5 == 0) return "Buzz" else return number.toString() } }
書いたあとでわかったことは、練習用としては微妙だったことですね。プロダクト側が全くJavaとほとんど変わらない感じになってます。ほとんど型宣言無いだけですよね。
Spockのコードに関して言えば、最初はwhen-thenで書いていたのを、整理してexpect-whereに直しました。
ちょっとコード的にも残念なので、次に練習するときはもう少し複雑になりそうな課題を練習台に選びたいと思います。
・・・というより、FizzBuzzをクラスにする必要あったのか!?