目の前に僕らの道がある

勉強会とか、技術的にはまったことのメモ

テスト駆動開発入門をPythonで写経してみた。7

7章で実施したこと

  • 同じ量のFrancとDollarを比較した際、同値と判断されないよう修正

__class__アトリビュートが同じかどうかで判定するようにしました。ただ直接__class__アトリビュートを見ているのが気持ち悪いです。ほかにいい方法はないかな。

money.py

#!/usr/bin/env python
# coding: utf-8
"""テスト駆動開発入門 7章 りんごとみかん
"""

class Money(object):
    def __eq__(self, other):
        return self._amount == other._amount and \
                self.__class__ == other.__class__

class Dollar(Money):
    def __init__(self, amount):
        self._amount = amount

    def times(self, multiplier):
        return Dollar(self._amount * multiplier)

class Franc(Money):
    def __init__(self, amount):
        self._amount = amount

    def times(self, multiplier):
        return Franc(self._amount * multiplier)

money_test.py

#!/usr/bin/env python
# coding: utf-8
"""テスト駆動開発入門 7章 りんごとみかん
"""

import unittest
from money import *

class TestMoney(unittest.TestCase):
    """moneyモジュールのテスト
    """
    
    def testMultiplication(self):
        """かけ算のテスト
        """
        five = Dollar(5)
        self.assertEqual(Dollar(10), five.times(2) )
        self.assertEqual(Dollar(15), five.times(3) )
    
    def testFrancMultiplication(self):
        """Francクラスのかけ算のテスト
        """
        
        five = Franc(5)
        self.assertEqual(Franc(10), five.times(2) )
        self.assertEqual(Franc(15), five.times(3) )
    
    def testEuality(self):
        """同値テスト
        """
        
        self.assert_(    Dollar(5) == Dollar(5) )
        self.assert_(not Dollar(5) == Dollar(6) )
        self.assert_(    Franc(5)  == Franc(5) )
        self.assert_(not Franc(5)  == Franc(6) )
        self.assert_(not Franc(5)  == Dollar(5) )

if __name__ == "__main__":
    unittest.main()

テスト駆動開発入門

テスト駆動開発入門

  • 作者: ケントベック,Kent Beck,長瀬嘉秀,テクノロジックアート
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2003/09
  • メディア: 単行本
  • 購入: 43人 クリック: 1,002回
  • この商品を含むブログ (153件) を見る