当前位置: 首页 > 知识库问答 >
问题:

在python中模拟BigQuery连接

海鸣
2023-03-14

我在python文件中有以下代码。我必须对这个文件进行单元测试。但是为了做到这一点,我需要实例化类的对象

class BigQuery(metaclass=singleton.Singleton):
    """
    Big Query Class for operations on big query
    Will standardize in future versions.
    """

    def __init__(self):
        """
        Used for initializing client
        """
        try:
            self.client = bigquery.Client.from_service_account_json(
                SERVICE_ACCOUNT_JSON)
        except:
            logging.error("Cannot instantiate bigquery client", exc_info=True)
            raise Exception("Cannot instantiate bigquery client.")

共有1个答案

刘博文
2023-03-14

我让它起作用了。基本上,您需要模拟对bigquery客户机初始化的函数调用。在mock.patch的帮助下,我们可以模拟客户机对象或函数from_service_account_json。下面是代码

with patch.object(bigquery.Client, "from_service_account_json") as srv_acc_mock:
            srv_acc_mock.return_value = Mock()

            # do something here....

我们也需要对GCS客户机遵循相同的模式,但是通过导入正确的模块将bigquery.client更改为storage.client

 类似资料:
  • 问题内容: 我正在尝试为python中的类编写单元测试。该类在 init 上打开一个tcp套接字。我试图对此进行模拟,以便可以断言使用正确的值调用了连接,但是显然在单元测试中实际上并未发生。我已经厌倦了MagicMock,补丁程序等,但是还没有找到解决方案。 到目前为止我的班级看起来像 问题答案: 如果您只想断言被正确调用,这很简单 如果必须先导入模块才能访问,则需要稍微调整补丁:

  • 问题内容: 在Go中,TCP连接(net.Conn)是io.ReadWriteCloser。我想通过模拟TCP连接来测试我的网络代码。我有两个要求: 要读取的数据存储在字符串中 每当写入数据时,我都希望将其存储在某种缓冲区中,以便以后使用 是否有数据结构或简单的方法? 问题答案: 为什么不使用?它是一种并且具有获取存储数据的方法。如果需要将其设置为,则可以定义自己的类型: 并定义一个方法:

  • 问题内容: 我正在尝试近两个小时,没有任何运气。 我有一个看起来像这样的模块: 稍后在代码中: 有任何想法吗? 编辑: 亚历克斯的建议似乎无效: 运行测试时: 但是,当我从python交互式控制台运行相同的代码时,它 确实 起作用。 更多编辑: 我正在使用一个测试文件,该文件具有特定于我模块这一部分的所有测试。首先,我导入可用的模块,以演示和测试常用用法。缺少软件包被认为是一种极端情况,因此我稍后

  • 问题内容: 我在Python中使用时遇到了一些困难: 测试实际上返回正确的值,但它是Mock对象,不是。您如何在Python库中模拟属性? 问题答案: 您需要使用和: 这意味着:调用时,在该调用的返回值上,为属性设置a以返回value 。

  • 问题内容: 我正在开发一个Web应用程序,该应用程序显然在iOS设备中存在问题。问题是我不拥有iOS设备,而是在Linux Ubuntu中进行开发。我正在寻找一种在Linux(尤其是浏览器)中仿真/模拟此OS的方法,但是还没有找到任何东西。 到目前为止,我发现的是iOS SDK的Simulator,但这是针对Mac的。还有一些Windows模拟器。有人做过吗? 问题答案: 我能想到的唯一解决方案是

  • 问题内容: 我需要在Python程序中模拟循环。不幸的是,以下简单的代码不起作用: 代替“ 1,2,3,done”,它输出以下输出: 为了捕获“停止迭代”异常并正确中断while循环,我该怎么办? 为什么需要这种东西的一个示例在下面显示为伪代码。 状态机: 问题答案: 我不确定你要做什么。你可以像这样实现一个循环: 要么: 你在尝试使用do while循环来打印列表中的内容在做什么?为什么不使用: