zoukankan      html  css  js  c++  java
  • python单元测试unittest、setUp、tearDown()

    单元测试反应的是一种以测试为驱动的开发模式,最大的好处就是保证一个程序模块的行为符合我们设计的测试用例,在将来修改的时候,可以极大程度保证该模块行为仍然是正确的。

    下面我编写一个Dict来,这个类的行为和dict一直,同时可以通过属性来访问。

    mydict.py文件:

    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模块,并需要继承unittest.TestCase类,编写mydict_test.py:

    import unittest
    from mydict import Dict
    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_ket(key):
            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

    凡是以test开头的方法都是测试方法,反之不是,测试时候不会执行。其中,unittest.TestCase提供很多内置的条件判断,我们可以调用这些方法断言输出是否是我们所预计的。一般分为两种,一种是assertEqual():断言某两个结果是否一致。一种是assertRaises():断言是否是期待抛出的指定错误类型。

    如何运行单元测试呢?

    一种是在mydict_test.py文件最后添加2行代码:

    if __name__ == '__main__':
        unittest.main()

    这样我们可以直接运行mydict_test.py脚本。

    一种是命令行增加参数 -m unittest 直接运行单元测试:

    python -m unittest mydict_test

    另外,可以通过在单元测试中增加两个特殊函数setUp()和tearDown()函数,已实现在每调用一个测试方法的前后分别执行指定的动作,,其中setUp是在测试函数调用前执行,tearDown是在之后执行:

  • 相关阅读:
    linux 命令行远程登录 后台运行命令的方法
    再议perl写多线程端口扫描器
    perl 函数参数传递与返回值(一)
    Linux 删除带有特殊字符的文件
    桌面云的四大协议解析
    RemoteBox 1.6 发布,VirtualBox 管理工具
    gsoap
    Open Compute Project
    基于 Arduino 开发板,这款插座是可编程且开源的
    minnowboard
  • 原文地址:https://www.cnblogs.com/hiwuchong/p/8592816.html
Copyright © 2011-2022 走看看