• 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是在之后执行:

  • 相关阅读:
    Android--Activity中使用Intent传值
    Android--使用剪切板在Activity中传值
    Android--通过Application传递数据
    HTTP 头缓存Last-Modified,ETag,Expires
    HTTP请求头 If-Modified-Since
    HTML5 本地存储形式
    spring作用域(Spring Bean Scopes Example)
    java.sql.SQLException: Data truncation: Truncated incorrect DOUBLE value
    对hadoop 执行mapreduce时发生异常Illegal partition for的解决过程
    InnerHTML属性的XSS利用
  • 原文地址:https://www.cnblogs.com/hiwuchong/p/8592816.html
Copyright © 2020-2023  润新知