【问题标题】:Mocking Bigquery for integration tests模拟 Bigquery 进行集成测试
【发布时间】:2017-01-23 06:42:19
【问题描述】:

虽然其他接口在我的 Java 集成测试中比较容易模拟,但我找不到模拟 Bigquery 的正确方法。

一种可能性是模拟我在 Bigquery 本身之上编写的层,但我更喜欢以更自然的方式模拟 Bigquery。我正在寻找一个有限的、轻量级的实现,它允许定义表格内容,并支持使用标准 API 的查询。 有这样的图书馆吗?如果没有,有什么替代方法推荐?

【问题讨论】:

    标签: java google-bigquery integration-testing


    【解决方案1】:

    在单元测试中,模拟所有外部依赖项非常好,只要您使用接口抽象出对 BigQuery 客户端的访问,模拟应该不是问题。

    通过集成测试,我宁愿测试我所有的第 3 方依赖项 应用程序需要它。

    例如一种情况是 ETL,它将数据从外部源流式传输到 BigQuery,在这种情况下,集成测试需要验证所有数据是否按预期在 BigQuery 中,这意味着验证阶段需要考虑重复,并根据需要嵌套消息。

    另一种情况是运行一些业务 SQL 的应用程序,在这种情况下,您将在应用程序运行之前使用一些测试数据填充 BigQuery, 那么应用程序需要将 SQL 输出发布为视图/新表/或流出数据以进行验证。

    已经有一些库负责与数据存储进行集成测试,包括 BigQuery/NoSQL/SQL

    它们将为上述情况提供一个简单的解决方案,并完全支持 SQL、动态宏/谓词等......

    1. Dsunit (go-lang)
    2. JDsunit (java)
    3. Endly(语言无关)

    详细了解如何使用 endly 进行 ETL 和 BiqQuery 测试

    如果数据存储集成测试库不适合您,而您只是想测试 BigQuery 客户端,那么好消息是客户端使用 REST,因此使用网络嗅探器可以轻松记录来回发送的内容,然后你可以在回放器中使用它。为了从 您将使用 http java 代理的公共 BG 端点。

    【讨论】:

    • 我需要为 JDSUnit 安装 go-lang 吗?还有介绍说我们需要安装 DSUnit 服务器,那是什么?
    • 你需要安装golang,jdsunit只是dsunit server的简单rest客户端,实际负责数据准备和验证
    • 抱歉,不清楚我安装 golang 时是否会自动安装 dsunit 服务器?哪个组件与 BigQuery 通信,是 jdsunit 客户端还是 dsunit 服务器?请说清楚。谢谢。
    • go-lang 中的 DsUnit 服务器与 BigQuery 通信。看起来 jdsunit Config 具有 auto install 和 runLocally 选项,如果设置了它们,那么它会拉取、构建和运行 dsunit 服务器(如果安装了 golang)。
    • 谢谢@Adrian Witas,能否请您指出 jdsunit 的安装说明?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    • 2012-04-25
    • 2018-08-26
    • 2022-01-20
    • 2015-12-14
    • 2019-05-21
    • 1970-01-01
    相关资源
    最近更新 更多