阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Python代码测试

203次阅读
没有评论

共计 2382 个字符,预计需要花费 6 分钟才能阅读完成。

1、单元测试的意义

  • 作用

    用来对一个函数、一个类或者一个模块来进行正确性检测的工具

  • 结果

    • 单元测试通过,说明我们测试的这个函数能够正常工作
    • 单元测试不通过,要么有 bug,要么测试条件输入不正确
  • 意义

    • 假设对函数的代码进行了修改,只需要在跑一次单元测试,如果通过,说明此时的修改不会对函数原功能造成影响。如果不通过,说明此次的修改与原功能不一致,要么修改代码,要么修改测试
    • 确保一个程序模块的行为符合设计测试的用例,在将来修改的时候可以极大的保证该模块依然正确

2、单元测试之函数

  • calculater.py

    def mySum(x, y):
    ret = x + y
    return ret
    def mySub(x, y):
    a = 0
    ret = x - y
    return ret
  • 创建测试文件 test.py

    # 测试模块
    import unittest
    from calculater import mySum, mySub
    # 测试类
    class Test(unittest.TestCase):
    # 每个测试开始之前调用
    def setUp(self):
    print("开始测试……")
    # 每个测试结束之后调用
    def tearDown(self):
    print("结束测试……")
    # 测试函数名:tset__待测试函数名
    # 注意:其实也可以不是待测试函数名
    # 本质:只要是以 test__开头的函数就都会被执行
    def test_mySum(self):
    self.assertEqual(mySum(1,1), 2)
    def test__mySub(self):
    self.assertEqual(mySub(1, 1), 0)
    if __name__ == "__main__":
    unittest.main()
  • main.py

    from calculater import mySum, mySub
    if __name__ == "__main__":
    ret1 = mySum(1,2)
    if ret1 == 3:
    print("ret1 = %d"%ret1)
    else:
    print("我不想看 ret1")
    print("-------------")
    ret2 = mySum(1,2)
    # 认为逻辑是正确的
    if ret2 == 4:
    print("ret2 = %d" % ret2)
    else:
    print("我不想看 ret2")

3、单元测试之类

  • myDict.py

    class MyDict(dict):
    def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    def __setattr__(self, key, value):
    self[key] = value
    def __getattr__(self, item):
    try:
    return self[item]
    except KeyError as e:
    raise AttributeError("dict not has the key")
    # def run(self):
    # print("------------")
  • 创建测试文件 test.py

    import unittest
    from myDict import MyDict
    # 定义测试类,一个测试类只能测试一个类
    # 类名:Test 待测试的类名
    class TestMyDict(unittest.TestCase):
    # 每个测试开始之前调用
    def setUp(self):
    print("开始测试……")
    # 每个测试结束之后调用
    def tearDown(self):
    print("结束测试……")
    # 实例化阶段
    def test__init(self):
    d = MyDict(a=1)
    # 断言
    self.assertEqual(d.a, 1)
    self.assertTrue(isinstance(d, dict))
    # 测试设置值
    def test_key(self):
    d = MyDict()
    d["key"] = 1
    self.assertTrue("key" in d)
    self.assertEqual(d["key"],1)
    def test_attr(self):
    d = MyDict()
    d.key = 1
    self.assertTrue("key" in d)
    self.assertEqual(d.key, 1)
    # 判断
    def test_keyerror(self):
    d = MyDict()
    # 通过 d["key"] 访问不存在的属性抛出 KeyError 异常
    with self.assertRaises(KeyError):
    value = d["key"]
    def test_attrerror(self):
    d = MyDict()
    # 通过 d.key 访问不存在的属性抛出 AttributeError 异常
    with self.assertRaises(AttributeError):
    value = d.key
    # def test__run(self):
    # d = MyDict()
    # d.run()
    # self.assertEqual(d.run(), 1)
    if __name__ == "__main__":
    unittest.main()
  • main.py

    from myDict import MyDict
    if __name__ == "__main__":
    d = MyDict(a=0)
    print(d, type(d))
    d.a = 1
    if d.a == 1:
    print("----------------------")
    else:
    print("*************")
    # d.c = 3
    # if d.c == 4:
    # print("**********************")

4、文档测试

# 该模块可以直接提取注释中的代码并执行测试
import doctest
def mySum(x, y):
# doctest 严格按照 python 交互模式命令的输入和输出来判断结果
'''
>>> print(mySum(1,1))
2
'''
return x + y + 1
print(mySum(1,2))
doctest.testmod()

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-05-26发表,共计2382字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中