0

0

如何在 pytest 中跳过 joblib 缓存并直接调用原始函数

花韻仙語

花韻仙語

发布时间:2026-01-24 13:53:01

|

240人浏览过

|

来源于php中文网

原创

如何在 pytest 中跳过 joblib 缓存并直接调用原始函数

在使用 pytest 测试被 `joblib.memory.cache` 装饰的函数时,可通过访问其 `.func` 属性绕过缓存,直接执行原始逻辑,确保测试真实、可重复且不依赖磁盘缓存状态。

joblib.Memory.cache 装饰器会将原函数封装为一个 MemorizedFunc 实例,该实例不仅支持缓存调用,还保留了对原始函数的引用——即 .func 属性。这是 joblib 官方提供的标准方式,无需引入 mocking(如 unittest.mock.patch 或 pytest-mock),既简洁又可靠。

例如,以下代码定义了一个带缓存的平方函数:

from joblib import Memory

memory = Memory(location="cache")

@memory.cache
def func(a):
    print("Executing original function!")  # 可用于验证是否真正执行
    return a ** 2

在单元测试中,若直接调用 func(2),joblib 可能从磁盘读取缓存结果(甚至首次运行后生成缓存文件),导致无法验证函数逻辑本身,也使测试耦合于外部状态。此时应改用:

def test_func():
    assert func.func(2) == 4  # ✅ 直接调用原始函数,完全跳过缓存

✅ 优势说明:

一键职达
一键职达

AI全自动批量代投简历软件,自动浏览招聘网站从海量职位中用AI匹配职位并完成投递的全自动操作,真正实现'一键职达'的便捷体验。

下载
  • 零副作用:不创建/读取缓存目录,无需清理 location;
  • 高可靠性:不依赖 mock 行为,避免因 patch 错误目标(如误 mock Memory.__init__ 或 cache 方法)导致测试失效;
  • 语义清晰:.func 是 joblib 公开 API,文档明确支持,长期兼容性好。

⚠️ 注意事项:

  • 不要尝试 mock Memory 实例或重置 memory 对象(如 memory.clear()),这会影响其他测试的隔离性,且无法保证当前调用一定“不命中缓存”;
  • 若需测试缓存行为本身(如验证是否命中/未命中),应另起测试用例,并配合 tmp_path 提供临时 cache 目录 + 显式清理;
  • 确保被测函数未被多次装饰(如叠加 @lru_cache 或自定义装饰器),否则 .func 链可能断裂——此时建议重构为显式分离逻辑与缓存(如将核心逻辑提取为无装饰函数,再由缓存版本调用)。

总结:对绝大多数单元测试场景,cached_func.func(...) 是跳过 joblib 缓存最直接、最健壮的方式。它让测试回归本质——验证业务逻辑,而非缓存机制。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
location.assign
location.assign

在前端开发中,我们经常需要使用JavaScript来控制页面的跳转和数据的传递。location.assign就是JavaScript中常用的一个跳转方法。通过location.assign,我们可以在当前窗口或者iframe中加载一个新的URL地址,并且可以保存旧页面的历史记录。php中文网为大家带来了location.assign的相关知识、以及相关文章等内容,供大家免费下载使用。

224

2023.06.27

C++ 高级模板编程与元编程
C++ 高级模板编程与元编程

本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

10

2026.01.23

php远程文件教程合集
php远程文件教程合集

本专题整合了php远程文件相关教程,阅读专题下面的文章了解更多详细内容。

28

2026.01.22

PHP后端开发相关内容汇总
PHP后端开发相关内容汇总

本专题整合了PHP后端开发相关内容,阅读专题下面的文章了解更多详细内容。

21

2026.01.22

php会话教程合集
php会话教程合集

本专题整合了php会话教程相关合集,阅读专题下面的文章了解更多详细内容。

20

2026.01.22

宝塔PHP8.4相关教程汇总
宝塔PHP8.4相关教程汇总

本专题整合了宝塔PHP8.4相关教程,阅读专题下面的文章了解更多详细内容。

11

2026.01.22

PHP特殊符号教程合集
PHP特殊符号教程合集

本专题整合了PHP特殊符号相关处理方法,阅读专题下面的文章了解更多详细内容。

11

2026.01.22

PHP探针相关教程合集
PHP探针相关教程合集

本专题整合了PHP探针相关教程,阅读专题下面的文章了解更多详细内容。

8

2026.01.22

菜鸟裹裹入口以及教程汇总
菜鸟裹裹入口以及教程汇总

本专题整合了菜鸟裹裹入口地址及教程分享,阅读专题下面的文章了解更多详细内容。

52

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号