Keep on moving

あんまりまとまってないことを書きますよ

テスト勉強中(doctest編)

近頃あまり書いてないですが会社の勉強会でRuby+BDD(RSpec/autospec)の勉強中です。*1

Rubyだけでなく、pythonでのテストも調べたくなりました。
今回は有名どころでdoctestを使って、テスト駆動開発の第一章のコードを書いてみました。

class Dollar(object):
    def __init__(self,amount):
        '''
        >>> three=Dollar(3)
        >>> three.amount
        3
        '''
        self.amount=amount

    def times(self,multiplier):
        '''
        >>> five=Dollar(5)
        >>> five.times(2)
        >>> five.amount
        10
        '''
        self.amount *= multiplier

def _test():
    import doctest
    doctest.testmod()

if __name__ == "__main__":
    _test()

これをDollar.pyで保存し、以下のコマンドを実行してみました。

python Dollar.py -v

結果は以下

Trying:
    three=Dollar(3)
Expecting nothing
ok
Trying:
    three.amount
Expecting:
    3
ok
Trying:
    five=Dollar(5)
Expecting nothing
ok
Trying:
    five.times(2)
Expecting nothing
ok
Trying:
    five.amount
Expecting:
    10
ok
3 items had no tests:
    __main__
    __main__.Dollar
    __main__._test
2 items passed all tests:
   2 tests in __main__.Dollar.__init__
   3 tests in __main__.Dollar.times
5 tests in 5 items.
5 passed and 0 failed.
Test passed.

なるほど、">>>"を使うと必ず評価されるんですね。
これは手軽ですね。これからはテストをどんどん書くようにしたいと思います。
テスト1000本ノックを目指そうかな。

今度はunittest,nose,py.testなども試してみたいと思います。

テスト駆動開発入門

テスト駆動開発入門


レガシーコード改善ガイド (Object Oriented SELECTION)

レガシーコード改善ガイド (Object Oriented SELECTION)

  • 作者: マイケル・C・フェザーズ,ウルシステムズ株式会社,平澤章,越智典子,稲葉信之,田村友彦,小堀真義
  • 出版社/メーカー: 翔泳社
  • 発売日: 2009/07/14
  • メディア: 大型本
  • 購入: 44人 クリック: 628回
  • この商品を含むブログ (133件) を見る

*1:そのうちまとめる予定です。タイトルは"素人がBDDに手を出してみた(仮)"の予定です