目の前に僕らの道がある

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

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

JavaのassertEquals()は中でequals()メソッドを呼んでいるんですね。たぶん。だから違うオブジェクトを比較しているのに"Equal"と判断されるんですね。Javaでコードを書かないのでよくわかないですが。

それに対しPythonのassertEqual()は中で__eq__()メソッドないし、==演算子を使用しているんだと思います。たぶん。あとでソースコード読んで確認します。

それを踏まえて前回のを書き直してみました。

ただ、__eq__()とequals()が全く同じことをしているっていうはPythonの書き方としてどうなんだろうという気がしますが。

# !/usr/bin/env python
# coding : utf-8
"""
テスト駆動開発入門
4章 プライベート化
"""
import unittest

class TestMoney(unittest.TestCase):
    def testMultiplication(self):
        five = Dollar(5)
        self.assertEqual(Dollar(10), five.times(2) )
        self.assertEqual(Dollar(15), five.times(3) )

    def testEuality(self):
        self.assert_(Dollar(5).equals(Dollar(5) ) )
        self.assert_(not Dollar(5).equals(Dollar(6) ) )

class Dollar(object):
    __amount = 0
    def __init__(self, amount):
        self.__amount = amount

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

    def equals(self, dollar):
        return self.__amount == dollar.get_amount()

    def get_amount(self):
        return self.__amount

    def __eq__(self, other):
        return self.__amount == other.get_amount()

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

テスト駆動開発入門

テスト駆動開発入門

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