单元测试、文档测试
- 单元测试:单元测试是用来对一个模块、一个函数或者一个类来进行正确性检验的测试工作。
- unintest:Python自带的单元测试框架
代码:
```
# 单元测试
## unittestclass Dict(dict):
def init(self,**kw):
super().__init__(**kw) # 使用dict的初始化方法def __getattr__(self, key): # 动态返回属性key try: return self[key] except KeyError: raise AttributeError(r'"Dict" object has no attribute "%s"'% key) def __setattr__(self, key, value): self[key] = value
# unittest
import unittest # 导入unittest
class TestDict(unittest.TestCase): # 定义测试类,并继承unittest.TestCase类# test开头的方法就是测试方法,不以test开头的方法不被认为是测试方法,测试的时候不会被执行
def setUp(self): # 在每个测试方法前都会调用一次
print('unittest 单元测试 开始了! 现在执行的是 setUp方法')
# 运行测试# 测试dict取值用例 def test_init(self): d = Dict(a=1,b='test') self.assertEqual(d.a,1) # d.a 是否与 1 相等 self.assertEqual(d.b,'test') self.assertTrue(isinstance(d,dict)) # d是否是dict类型 # 测试dict 新增key,value用例 def test_key(self): d = Dict() d['key'] = 'value' self.assertEqual(d.key,'value') def test_attr(self): d = Dict() d.key = 'value' self.assertTrue('key' in d) self.assertEqual(d['key'],'value') def test_keyerrot(self): d = Dict() with self.assertRaises(KeyError): # 与try...except...finally 类似 value = d['empty'] def test_attreeor(self): d =Dict() with self.assertRaises(AttributeError): # 当通过d.empty 访问不存在的key时,期待抛出AttributeError value = d.empty def tearDown(self): # 在每个测试方法后都会调用一次 print('每个测试方法之后都会运行该方法!')
if name == 'main':
unittest.main()
# 另一种方法是在命令行通过参数-m unittest直接运行单元测试: python -m unittest 测试类
```
- unintest:Python自带的单元测试框架
文档测试:Python内置的“文档测试”(doctest)模块可以直接提取注释中的代码并执行测试
```
# 文档测试
class Dict1(dict):
'''
Simple dict but also support access as x.y style.>>> d1 = Dict1() >>> d1['x'] = 100 >>> d1.x 100 >>> d1.y = 200 >>> d1['y'] 200 >>> d2 = Dict1(a=1, b=2, c='3') >>> d2.c '3' >>> d2['empty'] Traceback (most recent call last): ... KeyError: 'empty' >>> d2.empty Traceback (most recent call last): ... AttributeError: 'Dict' object has no attribute 'empty' ''' def __init__(self, **kw): super(Dict, self).__init__(**kw) def __getattr__(self, key): try: return self[key] except KeyError: raise AttributeError(r"'Dict1' object has no attribute '%s'" % key) def __setattr__(self, key, value): self[key] = value
if name=='main':
import doctest
doctest.testmod()
```