What is it, naokirin?

テスト駆動開発の練習(18) -Groovy&SpockでFizzBuzz-

練習で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をクラスにする必要あったのか!?