python3(三十四)unitTest

""" 单元测试 """
__author__on__ = 'shaozhiqi  2019/9/23'


class Dict(dict):

    def __init__(self, **kw):
        super().__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模块

import unittest


# 也可以将上面的方法单独写到一个文件总用如下语法引入,对其进行测试
# from 目标测试文件名 import 要测试的组件
class TestDict(unittest.TestCase):

    def test_init(self):
        d = 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 = 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']

    def test_attrerror(self):
        d = Dict()
        with self.assertRaises(AttributeError):
            value = d.empty

    # 两个特殊的setUp()和tearDown()方法。这两个方法会分别在每调用一个测试方法的前后分别被执行。
    def setUp(self):
        print('setUp...')

    def tearDown(self):
        print('tearDown...')


# 运行单元测试
if __name__ == '__main__':
    unittest.main()

# 测试结果
# Ran 5 tests in 0.007s
#
# OK
# 这是推荐的做法,因为这样可以一次批量运行很多单元测试,并且,有很多工具可以自动来运行这些单元测试。

 

posted @ 2019-09-23 18:53  ~清风煮酒~  阅读(187)  评论(0编辑  收藏  举报