What is it, naokirin?

テスト駆動開発の練習(4) -Python&py.testでFizzBuzz-

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で実装してみたいと思います。