概念解释
test fixture
测试脚手架 包括测试前的准备工作以及测试后的清理工作
test case
独立测试单元; 可以继承TestCase来新建测试用例
test suite
测试用例的集合
test runner
执行与输出结果的组件
执行
main函数中 unittest.main()
命令行
python -m unittest test_module1 test_module2
python -m unittest test_module.TestClass
python -m unittest test_module.TestClass.test_method
?
python -m unittest tests/test_something.py
参数说明:
-
-b 丢弃成功执行信息;输出错误信息 -
-c 避免ctrl+c 退出测试 -
-f 出现错误即停止测试 -
-k 只运行匹配模式的测试方法和类
discover
python -m unittest discover
参数:
-
-v 输出详细结果 -
-s 开始搜索的目录, 默认为当前目录 -
-p 搜索字符串 默认 test*.py -
-t 指定项目最上层目录, 默认为开始时目录
编写用例
测试用例
-
继承unittest.TestCase -
实现一些test_开头的方法, 作为测试步骤 -
setUp函数 , 每次执行测试步骤前,都会执行该函数, 作为预处理 -
tearDown函数, 每次执行测试步骤后, 都会执行该函数, 作为后处理 -
setUpClass在测试case执行前执行, 需要加上@classmethod注释 -
tearDownClass 在测试case执行后执行, 需要加上@classmethod注释
测试套件
def suite():
? ?suite = unittest.TestSuite()
? ?suite.addTest(WidgetTestCase('test_default_widget_size'))
? ?suite.addTest(WidgetTestCase('test_widget_resize'))
? ?return suite
?
if __name__ == '__main__':
? ?runner = unittest.TextTestRunner()
? ?runner.run(suite())
打包测试方法
FunctionTestCase(test方法, setUp=与处理函数, tearDown=后处理函数)
跳过测试
支持定义在方法上,也支持在类上
-
@unittest.Skip(“说明”) -
@unittest.SkipIf(条件语句,"说明") -
@unittest.Unless(条件语句,"说明")
预计失败
@unittest.expectedFailure
断言
-
相等/不相等 -
布尔 -
Is/IsNot -
IsNone/IsNotNone -
In/NotIn -
IsInstance/NotIsInstance -
Raises 预期异常 -
RaiseRegex -
Warns -
WarnsRegex -
AlmostEqual/NotAlmostEqual -
Greter/GreaterEqual -
Less/LessEqual -
Regex/NotRegex 正则判断 -
CountEqual 断言 第一个序列包含第二个序列同样的元素 相当于assertEqual(Counter(list(first)), Counter(list(second))) -
TypeEqualityFunc (typeobj,function) 自定义方法比较 -
MultiLineEqual 多行字符串比较 -
SequenceEqual 比较两个序列 -
ListEqual -
TupleEqual -
SetEqual -
DictEqual
其他方法:
-
fail 失败 -
failureException 失败异常 -
longMessage -
…
unitest.mock
from unittest.mock import MagicMock
from unittest.mock import MagicMock
?
thing = ProductionClass() ? # 自定义类
thing.method = MagicMock(return_value=3) # mock方法,指定返回值
thing.method(3,4,5,key='value') ? # 调用方法
thing.method.assert_called_with(3,4,5,key='value') # 断言调用方法
|