个人在工作中用的不多。
编写单元测试,我们需要引入Python自带的unittest
模块:
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
编写单元测试类:
unittest中有很多方法测试类中的属性的方法。
# -*- coding: utf-8 -*- import unittest import Test class TestDict(unittest.TestCase): def test_init(self): d = Test.Dict(a=1, b='test') self.assertEqual(d['a'], 1) self.assertEqual(d['b'], 'test') self.assertTrue(isinstance(d, dict)) def test_key(self): d = Test.Dict() d['key'] = 'value' self.assertEqual(d['key'], 'value') def test_attr(self): d = Test.Dict() d.key = 'value' self.assertTrue('key' in d) self.assertEqual(d['key'], 'value') def test_keyerror(self): d = Test.Dict() with self.assertRaises(KeyError): value = d['empty'] def test_attrerror(self): d = Test.Dict() with self.assertRaises(AttributeError): value = d.empty if __name__=='__main__': TestDict.test_attrerror()
setUp与tearDown
可以在单元测试中编写两个特殊的setUp()
和tearDown()
方法。这两个方法会分别在每调用一个测试方法的前后分别被执行。
可以将类中每一个方法都需要运行的代码放到其中。比如连接数据库等操作
def setUp(self): print 'setUp...' def tearDown(self): print 'tearDown...'