TDDでFizzBuzzやってみた
こんばんは。風邪ひきました、つらいです。
ところで、今日はFizzBuzzをTDD(BDD)でやってみました。以下の本を参考に順にやってみました。
Web開発の基礎徹底攻略 (WEB+DB PRESS plus)
- 作者: 小飼弾,田籠聡,近藤宇智朗,並河祐貴,赤松祐希,井上誠一郎,ミック,天尋左石,和田裕介,WEB+DB PRESS編集部
- 出版社/メーカー: 技術評論社
- 発売日: 2013/07/23
- メディア: 大型本
- この商品を含むブログ (5件) を見る
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)); } }