将模拟的 s3 连接传递给其他方法

pass mocked s3 connection to other methods

我想在特定方法中模拟一次 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()
    ....

提前致谢。

如果使用 pytest fixtures 是一个选项,我喜欢在使用 moto 时使用 AWS mocks 做的事情:

@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 确保在每次测试后正确完成清理。