doctest+unittest no.1
結城先生の『Java言語で学ぶリファクタリング入門』をPythonでやってみる
http://www.hyuki.com/ref/
doctest+unittest部分の勉強のため
http://d.hatena.ne.jp/MiCHiLU/ をまねしてます。
リファクタリング内容
- マジックナンバーの置き換え
- テスト部分の切り出し
#!/usr/bin/env python """ refectraring #1 >>> from ref1 import Robot >>> r = Robot('Andrew') >>> r.order(0) Andrew walks. >>> r.order(1) Andrew stops. >>> r.order(2) Andrew jumps. """ class Robot(object): """ Robot class """ def __init__(self, input_name): self.name = input_name def order(self, command): if (command == 0): print '%s walks.' % (self.name) elif (command == 1): print '%s stops.' % (self.name) elif (command == 2): print '%s jumps.' % (self.name) else : print 'Command Error. command = %s' % (command) def _test(): import doctest doctest.testmod() if __name__ == '__main__': _test()
#!/usr/bin/env python """ refectraring #1 >>> from ref1 import Robot >>> r = Robot('Andrew') >>> r.order(0) Andrew walks. >>> r.order(1) Andrew stops. >>> r.order(2) Andrew jumps. """ class Robot(object): """ Robot class """ COMMAND_WALK = 0 COMMAND_STOP = 1 COMMAND_JUMP = 2 def __init__(self, input_name): self.name = input_name def order(self, command): if (command == self.COMMAND_WALK): print '%s walks.' % (self.name) elif (command == self.COMMAND_STOP): print '%s stops.' % (self.name) elif (command == self.COMMAND_JUMP): print '%s jumps.' % (self.name) else : print 'Command Error. command = %s' % (command) def _test(): import doctest doctest.testmod() if __name__ == '__main__': _test()
テスト部分の切り出し
doctestは、doctestが書かれた別ファイルからテストすることも可能
ref1_doctest.txt
""" refectraring #1 doctest file >>> from ref1_before import Robot >>> r = Robot('Andrew') >>> r.order(0) Andrew walks. >>> r.order(1) Andrew stops. >>> r.order(2) Andrew jumps. """
ファイルからのdoctestの実行
import doctest test_file = 'ref1_doctest.txt' doctest.testfile(test_file)
unittestとdoctestの使い分けとかを勉強していく。