46-单元测试(1)

单元测试:对一个函数,类,模块进行测试:TDD(测试驱动开发)

在同一个目录下建两个py文件:mydict.py和Testmydict.py

mydict.py

class Dict(dict):
def init(self, kw):
super().init(
kw)

def getattr(self, key): #获取attr
try:
return self[key] #对dict自定义一个 d.key 的操作 { 原本是d['key'] }
except KeyError:
raise AttributeError(r"'Dict' object has no attribute '%s'" % key)

def setattr(self, key, value): #设置attr
self[key] = value

假设要对这个类进行单元测试

Testmydict.py

import unittest #单元测试模块
from mydict import Dict
class TestDict(unittest.TestCase):
def test_init(self): #test_xxx即为测试方法,从不同方面对待测试的事物进行测试
d = Dict(a=1, b='test')
self.assertEqual(d.a, 1) #断言函数返回的结果与1相等
self.assertEqual(d.b, 'test')
self.assertTrue(isinstance(d, dict))

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_keyerror(self):
d = Dict()
with self.assertRaises(KeyError):
value = d['empty'] #通过d['empty']访问不存在的key时,断言会抛出KeyError

def test_attrerror(self):
d = Dict()
with self.assertRaises(AttributeError):
value = d.empty #通过d.empty访问不存在的key时,我们期待抛出AttributeError

def setUp(self): #自动,的在每个测试方法,前面执行
print('setUp...')

def tearDown(self): #自动,的在每个测试方法,后面执行
print('tearDown...')
#比如如果本测试class需要 自动连接和关闭数据库,可用 setUp()与tearDown()减少重复劳动

之后进入控制台:python -m unittest mydict_test

posted @ 2018-03-04 14:18  hzhang_NJU  阅读(98)  评论(0)    收藏  举报