Python学习笔记13——单元测试

本文介绍了一个可通过属性方式访问元素的字典类实现及其单元测试方法。该类扩展了Python内置字典,允许使用点语法获取和设置键值。此外,还详细展示了如何编写单元测试以确保此类按预期工作。
# !/user/bin/env Python3
# -*- coding:utf-8 -*-

"""
file:MyDic.py
create time:2018/5/24 16:28
desc: 用于单元测试,可以通过属性方法访问内部元素的Dic
"""


class Dict(dict):
    """
    可以通过属性方法访问内部元素的Dic
    """

    def __init__(self, **kw):
        """
        初始化
        :param kw:初始化字典信息
        """
        super().__init__(**kw)  # 使用dic的初始化方法初始化对象

    def __getattr__(self, item):
        """
        获取属性
        :param item:key
        :return: key值对应的属性
        """
        try:
            return self[item]
        except KeyError as e:
            raise AttributeError(r"Dict has not %s attribute" % item)

    def __setattr__(self, key, value):
        """
        设置属性值
        :param key:key
        :param value: 属性新值
        :return:
        """
        self[key] = value

# !/user/bin/env Python3
# -*- coding:utf-8 -*-

"""
file:MyDic_Test.py
create time:2018/5/24 16:33
desc: 用于测试通过属性获取值的字典类的单元测试类
"""

import unittest
from UnitTest.MyDic import Dict


class TestDict(unittest.TestCase):
    """
    测试类需要从Unittest.TestCase继承
    测试方法需要以test开头,否则不被认为是测试方法,测试时不会被执行
    unittest.TestCase提供了很多内置条件判断用于辨别我们的方法是否达到我们的预期
    最常用的断言:
    assertEqual(arg1,agr2),用于判断arg1是否等于arg2
    assertRaises(ErrorClass),用于判断抛出的是否是指定类型的Error,一般与with一起使用
    单元测试中还有两个特殊的方法:setUP()和tearDown(),这两个方法会在分别调用每一个测试方法的前后分别执行
    """

    def setUp(self):
        print('begin')

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

    def test_init(self):
        """
        初始化测试
        :return:
        """
        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


# 运行单元测试,还可以在命令行中通过-m unittest直接运行单元测试 python -m unittest MyDict_Test
if __name__ == '__main__':
    unittest.main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值