zoukankan      html  css  js  c++  java
  • Python -- 单元测试


    例子

    我们来编写一个Dict类,这个类的行为和dict一致,但是可以通过属性来访问,用起来就像下面这样:

    >>> d = Dict(a=1, b=2)
    >>> d['a']
    1
    >>> d.a
    1

    待测试程序

    #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

    单元测试代码

    
    
    #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_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

    运行单元测试

    方法1:

    在mydict_test.py末尾加入以下代码,和普通脚本一样执行

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

    方法2:

    在命令行通过参数-m unittest直接运行单元测试

    $ python3 -m unittest mydict_test
    .....
    ----------------------------------------------------------------------
    Ran 5 tests in 0.000s
    
    OK

    setUp与tearDown

    可以在单元测试中编写两个特殊的setUp()tearDown()方法。这两个方法会分别在每调用一个测试方法的前后分别被执行。

    class TestDict(unittest.TestCase):
    
        def setUp(self):
            print('setUp...')
    
        def tearDown(self):
            print('tearDown...')
    KEEP LEARNING!
  • 相关阅读:
    Django框架之第三篇模板语法
    Django框架之第二篇
    Django框架第一篇基础
    【数学基础】【快速幂运算模板】
    【搜索】【广搜模板】
    【动态规划】【子序列模板】
    [置顶] 【ACM模板】——hello_chengdongni 随着姿势提升,不定期补充
    【搜索入门专题1】 hdu1242 J
    【搜索入门专题1】E
    【搜索入门专题1】hdu1253 【BFS】 F
  • 原文地址:https://www.cnblogs.com/roronoa-sqd/p/4904390.html
Copyright © 2011-2022 走看看