unittest使用小demo

来源:互联网 发布:淘宝上买笔记本可靠吗 编辑:程序博客网 时间:2024/05/29 09:12

1.编写一个Dict的类,这个类的行为和dict的用法一致,也可以通过属性来访问。编写mydict.py如下:

# -*- coding:utf-8 -*-class Dict(dict):    def __init__(self,**kw):        super(Dict,self).__init__(**kw)    def __getattr__(self,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

为了编写单元测试,我们需要引入Python自带的unittest模块,编写mydict_test.py如下:

# -*- coding:utf-8 -*-import unittestfrom mydict import Dictclass TestDict(unittest.TestCase):    def test_init(self):        d=Dict(a=1,b="test")        self.assertEquals(d.a,1)        self.assertEquals(d.b,'test')        self.assertTrue(isinstance(d,dict))    def test_key(self):        d=Dict()        d['key']='value'        self.assertEquals(d.key,'value')    def test_attr(self):        d=Dict()        d['key']='value'        self.assertTrue('key' in d)        self.assertEquals(d['key'],'value')    def test_keyerror(self):        d=Dict()        with self.assertRaises(KeyError):            value=d['empty']    def test_attrerror(self):        d=Dict()        with self.assertRaises(AttributeError):            value=d.emptyif __name__=='__main__':    unittest.main()
通过调用unittest.main()能够执行多个测试用例

编写单元测试时,我们需要编写一个测试类,从unittest.TestCase继承。

test开头的方法就是测试方法,不以test开头的方法不被认为是测试方法,测试的时候不会被执行。

对每一类测试都需要编写一个test_xxx()方法。由于unittest.TestCase提供了很多内置的条件判断,我们只需要调用这些方法就可以断言输出是否是我们所期望的。最常用的断言就是assertEquals()

self.assertEquals(abs(-1),1)

另一种重要的断言就是期待抛出指定类型的Error,比如通过d['empty']访问不存在的key时,断言会抛出KeyError

with self.assertRaises(KeyError):

           value=d['empty']

而通过d.empty访问不存在的key时,我们期待抛出AttributeError

with self.assertRaises(AttributeError):

      value=d.empty

setUp与tearDown

可以在单元测试中编写两个特殊的setUp()tearDown()方法。这两个方法会分别在每调用一个测试方法的前后分别被执行。

setUp()tearDown()方法有什么用呢?设想你的测试需要启动一个数据库,这时,就可以在setUp()方法中连接数据库,在tearDown()方法中关闭数据库,这样,不必在每个测试方法中重复相同的代码:

class TestDict(unittest.TestCase):    def setUp(self):        print 'setUp...'    def tearDown(self):        print 'tearDown...'



原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 国考英语准考证名字错了怎么办 玻尿酸打鼻子双眼间距好怪怎么办 喝咖啡后胃不舒服想吐怎么办 分期付款买的车不想还款了怎么办 考试时打小抄被同学发现怎么办 生完二胎计生办强制要求上环怎么办 没办二代身份证户口被注销怎么办 川航特价儿童票名字写错怎么办 川航机票名字错一个字怎么办 买飞机票名字打错了一个字怎么办 坐飞机耳朵聋了下飞机还痛怎么办 小孩咳嗽两个月了还不好怎么办 生完小孩肚子瘦不下来怎么办 胆子小一个人在家里都害怕怎么办 怀了双胞胎两个宝宝很挤怎么办 飞机无人陪护如果接机延误该怎么办 过年要坐火车回家 狗狗怎么办 一岁八个月宝宝小腿弯怎么办 2岁宝不愿意坐马桶拉屎怎么办 宝宝两岁多肺炎出院还老咳嗽怎么办 去外国机场买机票不会说外语怎么办 坐飞机不能带的物品办理托运怎么办 深圳外地户口儿童要办身份证怎么办 网上订票错写了护照号怎么办 国航 在智能火车票订飞机票订反了怎么办 办社保卡的时候填错地址怎么办 两个人住酒店只有一张身份证怎么办 农村社保卡信息错了说改不了怎么办 社保卡与原医保卡信息错误怎么办 学校发的社保卡丢了怎么办 魔棒工具选中选区后再怎么办 微信每次打开都出现月球图案怎么办 仙人掌的刺扎手里弄不出来怎么办 保险交满15年领了一年死了怎么办 狗咬了出了点血怎么办 被小狗咬到了吃了海鲜怎么办 想给一个人道歉又不敢说怎么办 被尘封的故事中魔法师不见了怎么办 宝骏5602挡升3挡有点卡怎么办 剥开的榴莲没熟壳又扔了怎么办 视频播放器激活码设备超限了怎么办