在类方法上应用 moto 失败

Applying moto on a classmethod fails

将 moto 模拟应用于整个测试 class 对 class 方法没有影响,例如 python 单元测试 setupClass 方法。

@mock_ssm
class SomeClassTest(unittest.TestCase):

    @classmethod
    def setUpClass(cls) -> None:
        boto3.client("ssm").put_parameter(Name="some-name",
                                          Value="some-value")

将导致

botocore.exceptions.NoCredentialsError: Unable to locate credentials

将 moto 实例应用于整个 class(包括 classmethod)的一种方法是显式实例化和终止 moto 服务

class SomeClassTest(unittest.TestCase):

    @classmethod
    def setUpClass(cls) -> None:
        cls.mock_ssm = mock_ssm()
        cls.mock_ssm.start()
        boto3.client("ssm").put_parameter(Name="some-name",
                                          Value="some-value")

    def tearDownClass(cls) -> None:
        cls.mock_ssm.stop()