テストツール


doctest


ドキュメント文字列のテストツールで、ドキュメント文字列に解釈器形式で記述されたコードをテストします.
def my_abs(x):
'''
return absolute value of x
for example:
>>> my_abs(2)
2
>>> my_abs(0)
0
>>> my_abs(-3)
3
'''
    if not isinstance(x,(int,float)):
        raise TypeError('the argument of my_abs must be int or float...')
    if x >= 0:
        return x
    else: 
        return -1*x

if __name__ == '__main__':
    import doctest
    doctest.testmod()

出力がない場合は、ドキュメント文字列のコードがプログラム設計の期待に合致していることを示します.

unittest


ユニットテストモジュールは、関数、モジュール、クラスをテストできます.
#! /usr/bin/env python
# -*- coding:utf-8 -*-

__author__ = 'renyuan'
'''
unit test module about new class Dict

'''

import unittest
from my_dict import Dict
class My_unittest(unittest.TestCase):
'''
unit test class

functions start with 'test_' will be tested.

subclass object instance has  some assert methods.if result is not what we expect,the mudule doesn't pass the unit test.
'''
    def test_init(self):
    '''
    test Dict initialize
    '''
        d = Dict(x=1,y='two',z=[1,2,3])
        self.assertEquals(d.x,1)
        self.assertEquals(d.y,'two')
        self.assertEquals(d.z,[1,2,3])
        self.assertTrue(isinstance(d,dict))

    def test_key(self):
    '''
    test key
    add an item (key,value) in d,try to get value by d.key .\
    If d.key equals to value,test is passed.
    '''
        d = Dict()
        d['x'] = 5
        self.assertEquals(d.x,5)

    def test_value(self):
    '''
    test value
    add item (key,value) in d by d.key = value.
    Make sure that the key exists and d['key'] equals to value. 
    '''
        d = Dict()
        d.y = 'right'
        self.assertTrue('y' in d)
        self.assertEquals(d['y'],'right')

    def test_keyerror(self):
    '''
    test keyerror
    if the key doesn't exist,module should raise KeyError.
    '''
        d = Dict()
        with self.assertRaises(KeyError):
            value = d['no-exist-key']

    def test_attrerror(self):
    '''
    test attrerror
    if d.key doesn't exist,module should raise AttributeError
    '''
        d = Dict()
        with self.assertRaises(AttributeError):
            value = d.no_exist_key

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

ユニットテストモジュールunittestとテストする必要があるユニット(モジュール、クラス、または関数)をインポートし、unittestモジュールのTestCaseから継承されたカスタムテストクラスを作成し、インスタンスメソッドではtestで始まるものが実行されます.TestCaseには多くの条件判定方法が組み込まれている.
unittestを使用します.main()は、テストを実行し、カスタムテストクラスをインスタンス化し、testで始まるすべてのメソッドを実行します.