【Python单元测试】pytest框架单元测试 配置 命令行操作 测试报告 覆盖率
常用用例
本文重点介绍使用的Mock写法, pytest的基本用法,非本文重点。
睡眠Mock time.sleep
python内置类的mock可以参照此种写法, Mock后内置类/方法实际并不会执行,assert是否被调用
from unittest.mock import patchdef xx():print("a" * 10)time.sleep(1) # 此处有睡眠print("b" * 10)@patch("time.sleep") # mock后, UT执行时不睡眠
def test_xx(mock_sleep):xx()# .assert_not_called()# .assert_called()# .assert_called_once()# .assert_called_once_with(params) params UT调用时的参数# .assert_called_times(2) 被执行2次assert mock_sleep.assert_called_once_with(1) # 查看睡眠行是否调用, 并且mock睡眠时间是不是1秒
调用类Mock
# module_a/a.pyclass ClassA:@staticmethoddef cal_sum(a: int, b: int) -> int:return a + bdef cal_2_num_sum(a, b):ret = ClassA.cal_sum(a, b)return ret
# unit_test/test_module_a.pyfrom unittest.mock import patchfrom module_a.a import cal_2_num_sum@patch("module_a.ClassA")
def cal_2_num_sum(mock_class_a):mock_class_a.return_value.cal_sum.return_value = 0ret = cal_2_num_sum(1, 2)assert ret == 0@patch.object(ClassA, "cal_sum")
def cal_2_num_sum(mock_cal_sum):mock_cal_sum.return_value = 0ret = cal_2_num_sum(1, 2)assert ret == 0