【问题标题】:pass mocked s3 connection to other methods将模拟的 s3 连接传递给其他方法
【发布时间】:2021-10-27 07:09:18
【问题描述】:

我想在特定方法中模拟一次 s3 连接并将其传递给其他方法,而不是在所有方法之上使用 @mock_s3 并减少重复代码。 对此的任何指示都会有所帮助

class App_Test(unittest.TestCase):
@mock_s3
def get_s3_bucket(self):
    return boto3.resource('s3').create_bucket(Bucket=bucket_name)

def some_test(self):
    s3_bucket = get_s3_bucket()
    ....

def some_test_123(self):
    s3_bucket = get_s3_bucket()
    ....

提前致谢。

【问题讨论】:

    标签: python pytest python-unittest


    【解决方案1】:

    如果使用 pytest fixtures 是一个选项,我喜欢在使用 moto 时使用 AWS 模拟来做这件事:

    @pytest.fixture
    def mock_s3_bucket():
        with mock_s3():
            yield boto3.resource('s3').create_bucket(Bucket="test_bucket")
    
    def test_1(mock_s3_bucket):
        ...
    

    它为每个测试创建一个新存储桶,with 确保在每次测试后正确完成清理。

    【讨论】:

    • 这行不通。它正在寻找 aws 凭据。我应该将这些方法移出类吗?
    • @sai 你是使用 pytest 还是 unittest 来运行你的测试?
    • 单元测试@Tzane
    • Pytest 固定装置不适用于 unittest,但 unittest 测试类可用于 pytest。
    • 能否请您工作代码。没有单元测试也不行
    猜你喜欢
    • 2020-05-18
    • 1970-01-01
    • 2016-08-07
    • 2012-08-16
    • 1970-01-01
    • 1970-01-01
    • 2015-10-01
    • 2014-04-26
    • 1970-01-01
    相关资源
    最近更新 更多