Юнит-тестирование Python Google Bigquery - PullRequest
0 голосов
/ 10 декабря 2018

У меня проблемы с модульным тестированием следующего блока кода:

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

Может кто-нибудь издеваться надGoogle вещи и напишите модульный тест, пожалуйста?

1 Ответ

0 голосов
/ 12 декабря 2018

Хотя здесь можно улучшить макеты, это не принесет вам большой пользы в качестве теста.В вашем коде есть две основные вещи, которые вы можете тестировать:

  1. Передаете ли вы правильные учетные данные и т. Д. Для правильного использования BigQuery.
  2. Является ли бизнес-логика вашего приложения вокруг запроса и результатаобработка правильная.

Для (1) ни один модульный тест не даст вам реальной гарантии того, что ваш код работает на GCP.Все, что он сделает, это покажет, что он выполняет то, что проверяют ваши тесты.Вместо модульного тестирования, рассмотрим какой-нибудь интеграционный или системный тест, который фактически делает реальный вызов GCP (но не запускайте его так часто, как модульные тесты)

Модульные тесты хорошо подходят для (2), однако ваша функция в нынешнем виде ничего не делает.Если вы это сделали - скажем, какой-то код, который создает экземпляр объекта для каждой строки результата - тогда мы могли бы выполнить это модульное тестирование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...