Python函数测试需兼顾覆盖与隔离:覆盖指围绕输入、输出、边界、异常和逻辑分支设计用例;隔离指用mock切断外部依赖,确保测试快速稳定可靠。
Python函数测试的核心是验证行为正确性,同时确保测试不依赖外部状态。覆盖关注“测什么”,隔离关注“怎么测”。两者结合才能让测试既全面又可靠。
覆盖不是单纯追求代码行数达标,而是围绕函数的输入、输出、边界
和异常设计用例。
add(2, 3) 应返回 5
len([])、max([1])、int("0")
int("abc") 应抛出 ValueError,用 pytest.raises(ValueError) 断言coverage.py 检查未执行行真实调用数据库、网络或全局变量会让测试变慢、不稳定、难复现。隔离就是用可控替代物模拟这些依赖。
unittest.mock.patch 替换外部调用:比如函数内部调用了 requests.get,测试时 patch 它,让它返回预设的响应对象os.environ、模块级变量等;若必须,用 setUp/tearDown 或 @pytest.fixture 自动还原一个典型流程是:写函数 → 列出所有输入场景 → 为每个场景写断言 → 对外调用打补丁 → 运行并检查覆盖率。
立即学习“Python免费学习笔记(深入)”;
pip install pytest pytest-cov pytest-mock
pytest --cov=my_module --cov-report=term-missing,关注 “missing” 行提示漏测点@patch('my_module.read_config') 装饰测试函数,让 read_config 返回固定字典,不真去读文件很多测试看似通过,实则隐含耦合或假阳性。
assert isinstance(result, list) 不如 assert result == [1, 2]
test_func() 不如 test_calculate_total_handles_empty_cart(),名字即文档open(...).read(),测试没 patch 就会真的读文件,导致环境依赖
来电咨询