【发布时间】:2022-10-05 23:14:30
【问题描述】:
我有一个需要测试的简单 python 函数,如下所示:
# Get columns from BigQuery table
def get_schema_for_table(bq_client, source, schema, table):
bq_table = bq_client.get_table(f\'{source}.{schema}.{table}\')
return bq_table.schema
但是,为了对此进行测试,我不想使用真实表进行测试——我想在我的测试中创建一个 Mock 模式(以及一个模拟客户端)。
我的测试目前看起来像这样:
def test_get_schema_for_table(mocker):
mock_client = mocker.patch(\'google.cloud.bigquery.Client\', autospec=True)
Table.schema = MagicMock(return_value=[
SchemaField(\'column_1\', \'STRING\', \'NULLABLE\', None, (), None),
SchemaField(\'column_2\', \'STRING\', \'NULLABLE\', None, (), None),
SchemaField(\'column_3\', \'STRING\', \'NULLABLE\', None, (), None)
])
source = \'project\'
schema_name = \'dataset\'
table_name = \'existing_table\'
expected_schema = [SchemaField(\'column_1\', \'STRING\', \'NULLABLE\', None, (), None), SchemaField(\'column_2\', \'STRING\', \'NULLABLE\', None, (), None), SchemaField(\'column_3\', \'STRING\', \'NULLABLE\', None, (), None)]
returned_schema = get_schema_for_table(mock_client,source,schema_name,table_name)
print(returned_schema)
assert returned_schema == expected_schema
但是,当我打印 returned_schema 时,我得到以下信息:<MagicMock name=\'Client.get_table().schema\' id=\'4591155568\'>。
谁能告诉我我做错了什么?