Python中的Unittest基本使用

作者:哲思天下 时间:2022-04-27 15:49:51 

前言:

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

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

def my_abs(number):
   if not (isinstance(number, int) or isinstance(number, float)):
       raise ValueError("invalid value %s" % number)
   else:
       if(number >= 0):
           return number
       else:
           return -number

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

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

import unittest

from myAbs import my_abs
class TestmyAbs(unittest.TestCase):
   def test_positive(self):
       self.assertEqual(my_abs(1), 1)

def test_zero(self):
       self.assertEqual(my_abs(0), 0)

def test_negative(self):
       self.assertEqual(my_abs(-1), 1)

def test_inputerror(self):
       with self.assertRaises(ValueError):
           my_abs("1")

if __name__ == "__main__":
   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_开头的文件

运行结果如下:

Testing started at 4:43 PM ...
Launching pytest with arguments C:/work/myPythonPrj/test_myAbs.py --no-header --no-summary -q in C:\work\myPythonPrj

============================= test session starts =============================
collecting ... collected 4 items

test_myAbs.py::TestmyAbs::test_inputerror PASSED                         [ 25%]
test_myAbs.py::TestmyAbs::test_negative PASSED                           [ 50%]
test_myAbs.py::TestmyAbs::test_positive PASSED                           [ 75%]
test_myAbs.py::TestmyAbs::test_zero PASSED                               [100%]

============================== 4 passed in 0.03s ==============================

Process finished with exit code 0

来源:https://blog.csdn.net/yangjingdong2008/article/details/126485681

标签:Python,Unittest
0
投稿

猜你喜欢

  • 深入了解Python装饰器的高级用法

    2023-12-19 13:34:45
  • 解读ASP.NET 5 & MVC6系列教程(9):日志框架

    2023-06-30 06:10:57
  • JS 调试中常见的报错问题解决方法

    2023-07-16 07:42:13
  • python数据归一化及三种方法详解

    2023-02-28 01:48:40
  • Pycharm无法打开双击没反应的问题及解决方案

    2021-09-06 07:34:30
  • Python pyinotify日志监控系统处理日志的方法

    2023-12-11 08:57:37
  • Python+selenium实现自动循环扔QQ邮箱漂流瓶

    2021-07-12 23:46:28
  • 源码解析python的内存回收机制

    2023-05-19 18:12:16
  • Django自定义模板过滤器和标签的实现方法

    2023-08-12 12:24:51
  • Python 发送邮件方法总结

    2022-04-05 21:17:06
  • ASP编程菜鸟易犯的一个错误

    2008-10-29 13:27:00
  • 用自定义html标签让IE支持html 5新增元素

    2008-03-18 12:57:00
  • Python对XML文件实现增删改查操作

    2023-11-19 20:42:03
  • python抓取网站的图片并下载到本地的方法

    2022-05-19 23:45:08
  • asp如何从数据库中调出个人档案?

    2009-11-15 20:02:00
  • innerHTML 的一些问题

    2008-06-17 17:39:00
  • Python中类的继承代码实例

    2023-11-26 05:29:14
  • Python self用法详解

    2021-08-24 04:26:41
  • MySQL的数据库常用命令 超级实用版分享

    2012-01-05 18:58:00
  • python学生信息管理系统实现代码

    2021-07-01 03:41:18
  • asp之家 网络编程 m.aspxhome.com