今天小编给大家分享一下Python中的Unittest如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
前言:
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:workmyPythonPrj
============================= 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