Вы можете использовать monkeypatch
, чтобы переопределить поведение get_secret()
. Я сделал метод get_secret()
методом c класса 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 пройденный тест.
Здесь происходит то, что я создал функцию get_secret()
в моем test_secret_method, а затем перезапишите Secret.get_secret()
этим новым методом. Теперь вы можете использовать класс Secret в своем test_method и быть уверенным, что метод get_secret () вернет без фактического запуска исходного кода.