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

TDDでFizzBuzzやってみた

こんばんは。風邪ひきました、つらいです。

ところで、今日はFizzBuzzをTDD(BDD)でやってみました。以下の本を参考に順にやってみました。

Web開発の基礎徹底攻略 (WEB+DB PRESS plus)

Web開発の基礎徹底攻略 (WEB+DB PRESS plus)

FIzzBuzzクラス

class FizzBuzz
  def say(n)
    return 'FizzBuzz' if fizzbuzz? n
    return 'Fizz' if fizz? n
    return 'Buzz' if buzz? n
    n   
  end 

  private
  def fizzbuzz?(n)
    fizz?(n) && buzz?(n)
  end 

  def fizz?(n)
    n % 3 == 0
  end 

  def buzz?(n)
    n % 5 == 0
  end 
end

テストクラス側

require './fizzbuzz.rb'
describe FizzBuzz do
  subject { FizzBuzz.new }
  context '与えられた数字が1のとき' do
    it '1を返すこと' do
      subject.say(1).should == 1
    end 
  end 
  context '与えられた数字が2のとき' do
    it '2を返すこと' do
      subject.say(2).should == 2
    end 
  end 
  context '与えられた数字が3のとき' do
    it 'Fizzを返すこと' do
      subject.say(3).should == 'Fizz'
    end 
  end 
  context '与えられた数字が5のとき' do
    it 'Buzzを返すこと' do
      subject.say(5).should == 'Buzz'
    end 
  end 
  context '与えられた数字が9のとき' do
    it 'Fizzを返すこと' do
      subject.say(9).should == 'Fizz'
    end 
  end 
  context '与えられた数字が15のとき' do
    it 'FizzBuzzを返すこと' do
      subject.say(15).should == 'FizzBuzz'
    end 
  end 
end

気力あったので、PHPでもやってみました。

FizzBuzzクラス

<?php
class FizzBuzz
{
    public function say($n) {
        if ($this->fizz($n) && $this->buzz($n)) return 'FizzBuzz';
        if ($this->fizz($n)) return 'Fizz';
        if ($this->buzz($n)) return 'Buzz';
        return $n; 
    }   

    private function fizz($n) {
        if ($n % 3 === 0) return true;
    }   
    private function buzz($n) {
        if ($n % 5 === 0) return true;
    }   

}

テスト側

<?php
require 'vendor/autoload.php';
require 'FizzBuzz.php';
class FizzBuzzTest extends PHPUnit_Framework_TestCase
{
    public $f;
    public function setUp() {
        $this->f = new FizzBuzz();
    }

    public function test1のとき() {
        $this->assertEquals(1,$this->f->say(1));
    }
    public function test3のとき() {
        $this->assertEquals('Fizz',$this->f->say(3));
    }
    public function test5のとき() {
        $this->assertEquals('Buzz',$this->f->say(5));
    }
    public function test15のとき() {
        $this->assertEquals('FizzBuzz',$this->f->say(15));
    }
}