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!
  • 相关阅读:
    EXCEL某列长度超过255个字符导入SQL SERVER2005的处理方法
    正则同时获取a标签里的href,text 2项
    火柴棍
    特殊数
    骨牌铺方格
    拼图
    挑战题之排列生成
    模拟 找规律
    sort
    贪心 简单背包问题
  • 原文地址:https://www.cnblogs.com/roronoa-sqd/p/4904390.html
Copyright © 2011-2022 走看看