Python 单元测试 Google Bigquery

我在对以下代码块进行单元测试时遇到问题:


from google.cloud import bigquery

from google.oauth2 import service_account


def 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

任何人都可以嘲笑谷歌的东西并编写单元测试吗?


海绵宝宝撒
浏览 227回答 2
2回答

红颜莎娜

虽然可以改进这里的模拟,但作为测试,它不会为您提供太多价值。在您的代码中,您可以测试两个基本内容:您是否传递了正确的凭据等以正确使用 BigQuery。您的应用程序围绕查询和结果处理的业务逻辑是否正确。对于 (1),没有任何单元测试可以让您真正放心,您的代码可以在 GCP 上运行。它会做的就是表明它做了你的测试检查的事情。而不是单元测试,考虑某种集成或系统测试,实际对 GCP 进行真正的调用(但不要像单元测试那样经常运行它)单元测试非常适合 (2),但是您目前的功能实际上并没有做任何事情。如果你这样做了——比如说一些为每个结果行实例化一个对象的代码——那么我们可以对其进行单元测试。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python