Python测试
单元测试、Mock、测试覆盖。
unittest
基础
import unittest
class CheckNumbers(unittest.TestCase):
def setUp(self):
pass
def test_int_float(self):
self.assertEqual(1, 1.0)
def test_str_float(self):
self.assertEqual(1, "1")
@unittest.skip("Test is useless")
def test_skip(self):
self.assertEqual(False, True)
def tearDown(self):
pass
断言/Assertion
- assertEqual
- assertRaises
其他常用用法
- expectedFailure()
- skip(reason)
- skipIf(condition, reason)
- skipUnless(condition, reason)
执行
自动发现:
python -m unittest discover
mock
使用 Mock() 替换耗时对象或外部依赖
可以用 call_count 判断调用次数
from unittest.mock import Mock
用 patch 临时替换为固定值
import datetime
from unittest.mock import patch
fake_now = datetime.datetime(2020, 2, 22)
with patch("datetime.datetime") as dt:
dt.now.return_value = fake_now
dt.now.assert_called_once_with()
代码覆盖率: coverage
pip install coverage
- coverage run coverage_unittest.py : 会生成.coverage数据文件
- coverage report : 基本报告
- coverage html : 会生成 htmlcov文件夹,更丰富的报告
其他参数:
- -m, –show-missing
扩展阅读
- Python 3 Object-Oriented Programming : Chap.12