为了账号安全,请及时绑定邮箱和手机立即绑定

Python 单元测试 Google Bigquery

Python 单元测试 Google Bigquery

海绵宝宝撒 2021-09-11 20:13:05
我在对以下代码块进行单元测试时遇到问题:from google.cloud import bigqueryfrom google.oauth2 import service_accountdef run_query(query, gcp_ser_acc):    credentials =     service_account.Credentials.from_service_account_info(gcp_ser_acc)    client = bigquery.Client(gcp_ser_acc['project_id'], credentials)    query_job = client.query(query)    results = query_job.result()    return results我是嘲笑的新手,我尝试了以下测试:def test_run_a_query_with_real_key(self):    gcp_ser_acc = {                'project_id': 'my_project_id',                'private_key': 'my_private_key',                'token_uri': 'my_token_uri',                'client_email': 'my_client_email'                }    with mock.patch('service_account.Credentials', call_args=gcp_ser_acc, return_value={}):        with mock.patch('bigquery.Client', call_args=(gcp_ser_acc['project_id'], {}), return_value={}):            run_query('SELECT 1+1 as col', gcp_ser_acc)            assert service_account.Credentials.called            assert bigquery.Client.called任何人都可以嘲笑谷歌的东西并编写单元测试吗?
查看完整描述

2 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

虽然可以改进这里的模拟,但作为测试,它不会为您提供太多价值。在您的代码中,您可以测试两个基本内容:

  1. 您是否传递了正确的凭据等以正确使用 BigQuery。

  2. 您的应用程序围绕查询和结果处理的业务逻辑是否正确。

对于 (1),没有任何单元测试可以让您真正放心,您的代码可以在 GCP 上运行。它会做的就是表明它做了你的测试检查的事情。而不是单元测试,考虑某种集成或系统测试,实际对 GCP 进行真正的调用(但不要像单元测试那样经常运行它)

单元测试非常适合 (2),但是您目前的功能实际上并没有做任何事情。如果你这样做了——比如说一些为每个结果行实例化一个对象的代码——那么我们可以对其进行单元测试。


查看完整回答
反对 回复 2021-09-11
  • 2 回答
  • 0 关注
  • 202 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信