文章目录
基本使用
下面是根据文档写的一个demo,主要的内容基本都包含了,使用时导入自己的业务类测试类中的方法就行。
py
import unittest
# 测试类不强制test开头,仅作为规范。但必须继承unittest.TestCase
class TestClass(unittest.TestCase):
@classmethod
def setUpClass(cls):
print('测试类开始之前(所有测试方法执行之前)执行,相关初始化操作')
@classmethod
def tearDownClass(cls):
print('测试类结束之前(所有测试方法执行之后)执行,相关清理操作')
def setUp(self):
print('每个测试方法执行前执行')
def tearDown(self):
print('每个测试方法执行后执行')
# 测试方法必须以test开头,testFun、test_fun都可
def test_fun1(self):
self.assertEqual(1 + 1, 2)
# 校验with内部代码是否抛出预期异常 出现异常测试通过 反之不通过
with self.assertRaises(ZeroDivisionError):
self.assertEqual(1 / 0, 1)
@unittest.skip # 跳过下面这个测试
def test_fun2(self):
self.assertTrue(1)
if __name__ == '__main__':
unittest.main()
setUpClass、tearDownClass、setUp、tearDown都可以省略。其他的一些校验类型参考下图:
不同启动方式的区别
测试的两种启动执行方式:
1)脚本中unittest.main()
启动执行
实际测试中(pycharm环境),如果一个脚本中有多个测试类、一个测试类中有多个测试方法的话,这种启动方式每次执行的命令后面的参数都可能会变化:
- 可能会只是一个模块名,这时候会执行模块中所有测试类的全部方法
- 也可能会是模块名.类名,只测试该类中的所有测试方法
- 也有可能会是模块名.类名.方法名的组合,只测试单独的一个方法
所以这种方式启动的话,建议脚本中只写一个测试类,且类中只有一个测试方法,所有的测试逻辑都放在该方法里。
2)命令行启动执行
这种方式可以直接指定模块、具体的测试类及测试方法等。
如果指定模块,会测试模块中所有测试类的全部方法。(命令执行目录下需要能搜索到指定模块,注意模块名不包含.py)
更多细节参考API:
https://docs.python.org/3/library/unittest.html(en)
https://docs.python.org/zh-cn/3/library/unittest.html(cn)