unittest的介绍和快速使用
什么是单元测试
unittest
1.单元测试:是指对软件中的最⼩可测试单元进⾏检查和
验证。对于单元测试中单元的含义,⼀般来说,要根据
实际情况去判定其具体含义, ⽐如编写的⼀个函数如下
function add(int a, int b){
return a + b
}
2.例如:
Java
⾥单元指⼀个类,图形化的软件中可以指⼀
个窗⼝或⼀个菜单等。总的来说,单元就是⼈为规定的
最⼩的被测功能模块。单元测试是在软件开发过程中要
进⾏的最低级别的测试活动,软件的独⽴单元将在与程
序的其他部分相隔离的情况下进⾏测试
3.接⼝测试⾥⾯,⼀个接⼝可以作为⼀个单元
什么是unitest?
1.Python
单元测试框架,类似于
java
的
JUnit
框架
2.官⽹:
https://docs.python.org/zh-cn/3.8/library/unittest.html
3.unittest
核⼼:
TestFixture
、
TestCase
、
TestSuite
、 TestRunner
单元测试框架unittest⼊⻔
⽤
import
语句引⼊
unittest
模块
测试的类都继承于
TestCase
类
setUp()
测试前的初始化⼯作;
tearDown()
测试后的清除⼯作
(
在每个测试⽅法运⾏时
被调⽤
)
示例:
# -*- coding: UTF-8 -*-
import unittest
class UserTestCase(unittest.TestCase):
def setUp(self):
print(" set up 开始")
def tearDown(self):
print("tearDown 执⾏结束")
def testCase1(self):
print("test case1")
def testCase2(self):
print("test case2")
if __name__ == '__main__':
unittest.main()
执行结果如下图:
断⾔(⽀持⾃定义报错信息)
self.assertEqual()
查看源码
⽂档:
https://docs.python.org/zh-cn/3/library/unittest.html#unittest.TestCase.debug
注意:
1
、所有类中⽅法的⼊参为
self
,定义⽅法的变量也
要
“self.
变量
2
、定义测试⽤例,以
“test”
开头命名的⽅法,⽅法的⼊参
为
self
3
、
unittest.main()
⽅法会搜索该模块下所有以
test
开
头的测试⽤例⽅法,并⾃动执⾏它们
4
、⾃⼰写的
py
⽂件不能⽤
unittest.py
命名,不然会找
不到
TestCase
5
、⽤例成功是输出
.
失败是
F
unittest单元测试
setUp
和
tearDown
每次⽤例执⾏前都会执⾏初始化条件
和结束条件
```
1
、所有类中⽅法的⼊参为
self
,定义⽅法的变量也
要
“self.
变量
2
、定义测试⽤例,以
“test”
开头命名的⽅法,⽅法的⼊参
为
self
3
、
unittest.main()
⽅法会搜索该模块下所有以
test
开
头的测试⽤例⽅法,并⾃动执⾏它们
4
、⾃⼰写的
py
⽂件不能⽤
unittest.py
命名,不然会找
不到
TestCase
5
、⽤例成功是输出
.
失败是
F
```
执⾏所有⽤例只运⾏⼀次初始化和清理条件,⽤setupclass
、
teardownclass
@classmethod
def setUpClass(cls):
print("
在所有的测试⽤例执⾏之前,只执⾏⼀次
============")
@classmethod
def tearDownClass(cls):
print("
在所有的测试⽤例执⾏之后,只执⾏⼀次
============")
示例:
# -*- coding: UTF-8 -*-
import unittest
class UserTestCase2(unittest.TestCase):
@classmethod
def setUpClass(cls):
print("setUpClass初始化")
@classmethod
def tearDownClass(cls):
print("tearDownClass 资源清理")
def testCase1(self):
print("test case1")
def testCase2(self):
print("test case2")
self.assertEqual(1, 1)
@unittest.skip("跳过这个")
def testCase3(self):
print("test case3")
self.assertEqual(1, 1)
if __name__ == '__main__':
# verbosity 默认是1,为0的话最简洁,不输出每个⽤例执⾏结果,2 输出⽤例的详细执⾏结果
unittest.main(verbosity=2)
结果如下: