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の使い分けとかを勉強していく。