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

Python代码测试

103次阅读
没有评论

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