• 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
  • 相关阅读:
    特效优化
    Jsp
    JRebel 热部署
    mysql
    行为树
    Medium | LeetCode 139. 单词拆分 | 动态规划
    Medium | LeetCode 31. 下一个排列
    Easy | LeetCode 27. 移除元素 | 快慢指针
    Medium | LeetCode 437. 路径总和 III | 树 + 回溯 + 前缀和
    Medium | LeetCode 337. 打家劫舍 III | 树后序遍历 + 动态规划
  • 原文地址:https://www.cnblogs.com/LS1314/p/8504603.html
Copyright © 2020-2023  润新知