テストツール
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
で始まるすべてのメソッドを実行します.