模拟Bigquery用于集成测试

20
虽然在我的Java集成测试中其他接口相对容易模拟,但我找不到一个合适的方法来模拟Bigquery。
一种可能性是模拟我编写的Bigquery顶层层面,但我更喜欢以更自然的方式模拟Bigquery。我正在寻找一种限制性、轻量级实现,允许定义表内容,并支持使用标准API进行查询。 有这样的库吗?如果没有,有哪些替代方法推荐?
1个回答

11

在单元测试中,模拟所有外部依赖关系是完全可以的。只要您使用接口来抽象出对BigQuery客户端的访问,模拟就不应该成为问题。

对于集成测试,我更希望测试需要进行到应用程序所需程度的所有第三方依赖项。

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

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

已经有一些库负责处理包括BigQuery / NoSQL / SQL在内的数据存储的集成测试

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

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

了解有关如何使用endly进行ETL和BiqQuery测试的更多信息。

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


我需要安装 Go 语言才能使用 JDSUnit 吗?另外,介绍中提到我们需要安装 DSUnit 服务器,那是什么? - user1965449
您需要安装golang,jdsunit只是一个简单的dsunit服务器REST客户端,实际上负责数据准备和验证。 - Adrian
抱歉,不太清楚当我安装golang时,dsunit服务器是否会自动安装?哪个组件与BigQuery通信,是jdsunit客户端还是dsunit服务器?请澄清。谢谢。 - user1965449
DsUnit 服务器使用 Go 语言与 BigQuery 进行通信。jdsunit Config 具备自动安装和本地运行选项,如果设置了这些选项,则它会拉取、构建并运行 dsunit 服务器(如果安装了 golang)。 - Adrian
谢谢@Adrian Witas,您能否告诉我jdsunit的安装方式? - user1965449

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接