FizzBuzz最後の一つ、Python&py.testによる実装。
もはや実装コードとテストコードで言うことはない(はず)。
class FizzBuzz(object): def __init__(self, startNumber): self.__currentNumber = startNumber def says(self): if self.__currentNumber % 3 == 0 and self.__currentNumber % 5 == 0: return "FizzBuzz" elif self.__currentNumber % 3 == 0: return "Fizz" elif self.__currentNumber % 5 == 0: return "Buzz" else: return str(self.__currentNumber) def increment(self): self.__currentNumber += 1 def decrement(self): self.__currentNumber -= 1 def setCurrentNumber(self, num): self.__currentNumber = num def getCurrentNumber(self): return self.__currentNumber
FizzBuzz.py
from FizzBuzz import * class TestFizzBuzz: def test_notMultipeOfThreeAndFive(self): # Number is not multiple of three and five fb = FizzBuzz(1) assert fb.says() == "1" def test_multipeOfThree(self): # Number is mupltiple of three fb = FizzBuzz(3) assert fb.says() == "Fizz" def test_multipeOfFive(self): # Number is mupltiple of five fb = FizzBuzz(5) assert fb.says() == "Buzz" def test_multipeOfThreeAndFive(self): # Number is mupltiple of three and five fb = FizzBuzz(15) assert fb.says() == "FizzBuzz" def test_increment(self): fb = FizzBuzz(1) fb.increment() assert fb.says() == "2" def test_decrement(self): fb = FizzBuzz(2) fb.decrement() assert fb.says() == "1" def test_setCurrentNumber(self): fb = FizzBuzz(1) fb.setCurrentNumber(2) assert fb.says() == "2" def test_getCurrentNumber(self): fb = FizzBuzz(1) assert fb.getCurrentNumber() == 1
testFizzBuzz.py
py.testは基本的にコマンドラインでpy.testの実行ファイルを実行しないといけないのでEcllipse&PyDevを使っている身としてはちょっと面倒くさいところがあります。
しかし、Pythonはスクリプト言語だということを思い出せば、そんな問題はないはず。スクリプトでpy.testの実行をさせればいいのだから。(当然のことですが)
というわけでWindows+Ecllipse+PyDev環境の私は以下のスクリプトを実行してます。
import subprocess subprocess.call("(py.testのパス) testFizzBuzz.py")
次は何をするか決めていませんが、また題材を見つけてTDDで実装してみたいと思います。