我的项目有一个名为config.py的文件,其中包含以下代码:
class Secret(Enum):
DATABASE_A = 'name_of_secret_database_A'
DATABASE_A = 'name_of_secret_database_A'
def secret(self):
if self.value:
return get_secret(self.value)
return {}
def get_secret(secret_name):
session = Session()
client = session.client(
service_name='secretsmanager',
region_name='us-east-1',
)
secret_value = client.get_secret_value(SecretId=secret_name)
return loads(secret_value.get('SecretString', "{}"))我需要在所有枚举调用的pytest测试中以某种方式模拟get_secret,例如Secret.DATABASE_A.secret ()
发布于 2020-08-05 19:59:51
您可以使用monkeypatch覆盖get_secret()的行为。我已经将get_secret()方法变成了秘密类的静态方法,但是您可以将它作为任何模块的一部分,也可以导入它。只需确保您在monkeypatch.setattr()调用中也进行了更改。
import pytest
from enum import Enum
class Secret(Enum):
DATABASE_A = 'name_of_secret_database_A'
DATABASE_B = 'name_of_secret_database_B'
def secret(self):
if self.value:
return Secret.get_secret(self.value)
return {}
@staticmethod
def get_secret(secret_name):
session = Session()
client = session.client(
service_name='secretsmanager',
region_name='us-east-1',
)
secret_value = client.get_secret_value(SecretId=secret_name)
return loads(secret_value.get('SecretString', "{}"))
def test_secret_method(monkeypatch):
def get_secret(secret_name):
return "supersecret"
monkeypatch.setattr(Secret, "get_secret", get_secret)
s = Secret.DATABASE_A
assert s.secret() == "supersecret"这将返回到1通过测试。
这里发生的事情是,我也在我的test_secret_method中创建了一个函数test_secret_method,然后用这个新方法覆盖Secret.get_secret()。现在,您可以在您的test_method中使用秘密类,并确保'get_secret()‘方法将返回什么而不实际运行原始代码。
https://stackoverflow.com/questions/63272253
复制相似问题