如何从python中的.csv文件创建类型为boto3.resources.factory.s3.ObjectSummary的对象?

2024-04-19 11:15:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用python为一个函数编写一个单元测试,该函数将S3 bucket中的一个对象作为输入参数

输入参数的类型为boto3.resources.factory.s3.ObjectSummary

我不希望我的单元测试访问S3

我正在编写一个将.csv文件读入类型为的对象的测试

pandas.core.frame.DataFrame.

有人知道我如何从中创建boto3.resources.factory.s3.ObjectSummary类型的对象吗

谢谢你的回复


Tags: 文件csv对象函数类型pandas参数s3
2条回答

您可以使用^{}

# builtins
from unittest.mock import patch

# 3rd party
import pandas as pd

with patch("boto3.resources.factory.s3.ObjectSummary") as patched_obj:
    patched_obj.return_value = pd.DataFrame()
    # run test in this scope

谢谢乔丹。我能像这样解决我的问题

import unittest from io 
import StringIO 
import boto3 
import pandas as pd from moto 
import mock_s3

class GetBindingsTester(unittest.TestCase):

@mock_s3  # mocks all calls to S3
def testGetBindings(self):
    s3_resource = boto3.resource('s3')
    s3_resource.create_bucket(Bucket="mock_bucket",
                          CreateBucketConfiguration={
                              'LocationConstraint': 'us-west-1'})

    dts_mapping_file = pd.read_csv(r'dtsMapping.csv')
    csv_buffer = StringIO()
    dts_mapping_file.to_csv(csv_buffer)
    s3_resource.Object("mock_bucket", 
        'dtsMapping.csv').put(Body=csv_buffer.getvalue())
    obj = s3_resource.Object("mock_bucket", "dtsMapping.csv")

相关问题 更多 >