You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何正确Mock Google Cloud Datastore的Query调用

问题原因

你打桩的是Query类本身,client.query(...)执行时会调用被mock的datastore的Query类生成实例,你直接在类层级配置fetch方法的返回值,实际代码调用的是Query实例的fetch方法,所以配置不生效,断言也会失败。

修正后的实现代码

from google.cloud.datastore import Client
from unittest.mock import patch


def foo():
    client = Client()
    try:
        ancestor = client.key("anc", "123")
        query = client.query(kind="child", ancestor=ancestor)
        for q in query.fetch(limit=1):
            assert False, "Successfully mocked everything"
    finally:
        client.close()

p = patch(
    "google.cloud.datastore.client.Query",
    spec=["fetch"],
)
with p as mock_query_klass:
    # 配置Query实例的fetch方法返回值,mock_query_klass.return_value就是生成的实例
    mock_query_klass.return_value.fetch.return_value = [1, 2]
    foo()
    mock_query_klass.return_value.fetch.assert_called_once()

修改点说明

  • 调整了spec参数,只保留实例实际存在的fetch方法,删除无用的__call__声明
  • 改为通过mock_query_klass.return_value访问Query实例,再给实例的fetch方法配置返回值、做调用断言

内容的提问来源于stack exchange,提问作者abergmeier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 04:24:03