前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python代码测试

Python代码测试

作者头像
星哥玩云
发布2022-09-08 12:53:47
4350
发布2022-09-08 12:53:47
举报
文章被收录于专栏:开源部署

1、单元测试的意义

  • 作用 用来对一个函数、一个类或者一个模块来进行正确性检测的工具
  • 结果
    • 单元测试通过,说明我们测试的这个函数能够正常工作
    • 单元测试不通过,要么有bug,要么测试条件输入不正确
  • 意义
    • 假设对函数的代码进行了修改,只需要在跑一次单元测试,如果通过,说明此时的修改不会对函数原功能造成影响。如果不通过,说明此次的修改与原功能不一致,要么修改代码,要么修改测试
    • 确保一个程序模块的行为符合设计测试的用例,在将来修改的时候可以极大的保证该模块依然正确

2、单元测试之函数

calculater.py

代码语言:javascript
复制
def mySum(x, y):
    ret = x + y
    return ret

def mySub(x, y):
    a = 0
    ret = x - y
    return ret

创建测试文件test.py

代码语言:javascript
复制
#测试模块
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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、文档测试

代码语言:javascript
复制
# 该模块可以直接提取注释中的代码并执行测试
import doctest

def mySum(x, y):
    # doctest严格按照python交互模式命令的输入和输出来判断结果
    '''
    >>> print(mySum(1,1))
    2
    '''
    return x + y + 1

print(mySum(1,2))

doctest.testmod()
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、单元测试的意义
  • 2、单元测试之函数
  • 3、单元测试之类
  • 4、文档测试
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档