Py学习  »  Python

python单元测试google bigquery

Hafizur Rahman • 5 年前 • 1529 次点击  

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

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

有人能模仿谷歌的东西,写一个单元测试吗?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/43695
 
1529 次点击  
文章 [ 1 ]  |  最新文章 5 年前
David
Reply   •   1 楼
David    6 年前

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

  1. 您是否传递了正确的凭据等以正确使用bigquery。
  2. 应用程序的查询和结果处理的业务逻辑是否正确。

对于(1),没有单元测试会让您真正确信您的代码在gcp上工作。它所能做的就是显示它做了测试所检查的事情。与其进行单元测试,不如考虑某种集成或系统测试,这种集成或系统测试实际上会对gcp进行真正的调用(但不要像单元测试那样频繁地运行它)

单元测试非常适合(2),但是您当前的功能实际上什么也做不了。如果你这样做了-比如说一些代码为每个结果行实例化了一个对象-那么我们可以对其进行单元测试。