【问题标题】:Python mocking table schemaPython 模拟表模式
【发布时间】: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\'>

谁能告诉我我做错了什么?

    标签: python pytest


    【解决方案1】:

    好吧,当这个模拟是返回你分配给MagicMock.由于您不调用模拟,因此您只需将其作为实例即可。

    用这个替换你的代码,它应该可以工作(尽管此时测试可能看起来有点毫无意义)

        Table.schema =[
            SchemaField('column_1', 'STRING', 'NULLABLE', None, (), None),
            SchemaField('column_2', 'STRING', 'NULLABLE', None, (), None),
            SchemaField('column_3', 'STRING', 'NULLABLE', None, (), None)
        ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-21
      • 1970-01-01
      • 1970-01-01
      • 2013-05-27
      • 1970-01-01
      • 2011-07-16
      • 1970-01-01
      相关资源
      最近更新 更多