码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Python中的Unittest基本用法


    Unittest又名单元测试,主要用于测试自己写的代码的正确性和完备性,也方便自己和他人对代码的维护。在软件开发过程中,测试驱动开发的理念是一种好的开发习惯。

    例如现在我们写了一个求绝对值的函数my_abs,存放在myAbs.py中

    1. def my_abs(number):
    2. if not (isinstance(number, int) or isinstance(number, float)):
    3. raise ValueError("invalid value %s" % number)
    4. else:
    5. if(number >= 0):
    6. return number
    7. else:
    8. return -number

    此处的my_abs函数对参数做了检查,参数必须是一个数(python的数只有int和float型)。那么如果想要测试这个函数的正确性,我们需要写一个测试函数,用于测试函数的各个分支情况。

    基于unittest的的测试代码如下:

    1. import unittest
    2. from myAbs import my_abs
    3. class TestmyAbs(unittest.TestCase):
    4. def test_positive(self):
    5. self.assertEqual(my_abs(1), 1)
    6. def test_zero(self):
    7. self.assertEqual(my_abs(0), 0)
    8. def test_negative(self):
    9. self.assertEqual(my_abs(-1), 1)
    10. def test_inputerror(self):
    11. with self.assertRaises(ValueError):
    12. my_abs("1")
    13. if __name__ == "__main__":
    14. unittest.main()

    上述代码存放在test_myAbs.py中。unittest的基本使用方法是:

    1. 文件命名以test_开头,这样方便unittest自动执行,unittest能自动识别目录下test_开头的文件执行

    2. import unittest     这个是运行unittest的前提

    3. 定义class要以Test开头,必须要从unittest.TestCase继承,且不能有init方法,测试的方法或者函数以test_开头

    4. 测试方法中使用assert进行断言

    在上面测试代码的TestMyabs类的方法中,分别对正数,零和负数的情况进行了测试,使用assertEqual进行结果的判定;另外测试中还对输入参数是无效的情况进行了判定,使用了with语句和assertRaises的方式,针对期望抛出来的异常进行判定

    unittest的运行方式:

    1. 单独运行test_myAbs.py文件,前提是在文件尾增加

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

    2. 发送命令 python -m unittest .\myAbs.py

       当发送命令python -m unittest时,会执行当前目录下所有test_开头的文件

    运行结果如下:

    1. Testing started at 4:43 PM ...
    2. Launching pytest with arguments C:/work/myPythonPrj/test_myAbs.py --no-header --no-summary -q in C:\work\myPythonPrj
    3. ============================= test session starts =============================
    4. collecting ... collected 4 items
    5. test_myAbs.py::TestmyAbs::test_inputerror PASSED [ 25%]
    6. test_myAbs.py::TestmyAbs::test_negative PASSED [ 50%]
    7. test_myAbs.py::TestmyAbs::test_positive PASSED [ 75%]
    8. test_myAbs.py::TestmyAbs::test_zero PASSED [100%]
    9. ============================== 4 passed in 0.03s ==============================
    10. Process finished with exit code 0

    参考文章:

    unittest自动执行的几种方法:

    python unittest自动化执行的几种方式 - HQS_blog - 博客园

    unittest中的断言方法:

    python:Unittest_断言方法_觅梦_feng的博客-CSDN博客_python unittest断言

  • 相关阅读:
    (Java版)大小写转换设计一个程序, 输入一行字符串, 将其中大写转为小写, 小写转为大写. 其余字符不变
    高教社杯数模竞赛特辑论文篇-2023年A题:定日镜场的优化设计(续)(附获奖论文及MATLAB代码实现)
    建一座设计模式大厦
    The Linux Kernel ktime
    30天Python入门(第二十八天:深入了解Python API的使用)
    【RT-Thread】nxp rt10xx 设备驱动框架之--rtc搭建和使用
    2309C++均为某个类型
    微信创意铃声定制,从铃声中找商机,轻松赚钱!
    Postgresql使用dblink实现跨库查询
    真正“搞”懂HTTP协议04之搞起来
  • 原文地址:https://blog.csdn.net/yangjingdong2008/article/details/126485681
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号