[英]Python patched Class - method return_value returns MagicMock
我有一個函數可以確定是否可以從環境變量或 Google Cloud Secret Manager(通過自定義類)中提取令牌。
我正在模擬秘密管理器連接類,因此它實際上並沒有連接到 GCP,但是我從中獲得的pull_secret()
方法正在返回另一個 MagicMock 對象。
這是函數代碼( utility_functions.py
):
def fetch_token(secret_name: str):
try:
token = os.environ['TOKEN']
except KeyError:
print("TOKEN environment variable not set. Pulling Secret from Google Cloud Secret Manager...")
token = None
if token is None or token == '':
gcp_sm = SecretManagerConnection()
token = gcp_sm.pull_secret(project_id=os.environ['GCP_PROJECT_ID'], secret_name=secret_name)
return token
我正在使用的測試代碼如下:
@patch("app.utilities.utility_functions.SecretManagerConnection")
def test_fetch_token_google_secret(mock_sm):
os.environ["GCP_PROJECT_ID"] = "test"
mock_sm.pull_secret().return_value = "1234567890.abcdefghijklmnopqrstuvwxyz"
del os.environ["TOKEN"]
assert fetch_token("test") == "1234567890.abcdefghijklmnopqrstuvwxyz"
我得到的錯誤是AssertionError: assert <MagicMock name='SecretManagerConnection().pull_secret()' id='2533589158400'> == '1234567890.abcdefghijklmnopqrstuvwxyz'
在嘗試分配pull_secret()
返回值時我做錯了什么嗎?
修補SecretManagerConnection
類將用一個魔術模擬實例替換它。 當在fetch_token
函數中實例化此類時,實例化的類將返回模擬實例的return_value
,在您的情況下,該實例未正確配置/設置。
在模擬類的return_value
上配置/設置pull_secret
方法的return_value
,而不是在模擬類本身上設置。
@patch("app.utilities.utility_functions.SecretManagerConnection")
def test_fetch_token_google_secret(mock_sm):
os.environ["GCP_PROJECT_ID"] = "test"
instance = mock_sm.return_value
instance.pull_secret.return_value = "1234567890.abcdefghijklmnopqrstuvwxyz"
del os.environ["TOKEN"]
assert fetch_token("test") == "1234567890.abcdefghijklmnopqrstuvwxyz"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.