在使用 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 # ✅ 直接调用原始函数,完全跳过缓存✅ 优势说明:

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