我有一个返回字典的方法,该字典包含电子邮件特定的机密信息,如地址、收件人、令牌等。
为了发送电子邮件,我需要访问一个 REST URL 并将数据与机密信息一起发送。
我需要模拟负责发送邮件的方法
def _get_email_status(self, settings: Settings, data: dict):
# it's a dictionary
email_param = settings.get_confidential_data()
json_content = Task.build_email_content(
weekly_build_details, email_param.get(0),
"subject", email_param.get(1),
"name", email_param.get(2),
email_param.get(3)
# this method contains the rest URL and hit that url
status = Utilities().send_email(email_param.get(4),
json_content)
return status
想知道如何为这门课写一个模拟
根据 mattyx17 解决方案,
我创造了这个,
test_data = {
'test': 'test'
}
confidential_data = {0: "confidential_details",
1: "confidential_subject",
2: "confidential_name",
3: "confidential3",
4: "confidential4",
5: "confidential5",
6: "confidential6"}
mock_settings = MagicMock()
mock_settings.get_confidential_data = MagicMock(return_value=confidential_data)
mock_settings.keys.return_value.__iter__.return_value = confidential_data.keys()
mock_settings.__getitem__.side_effect = lambda key: confidential_data[0]
param = mock_settings.get_confidential_data
print(param)
json_content = Task.build_email_content(test_data, dict(mock_settings).get(0),
dict(mock_settings).get(1), dict(mock_settings).get(2),
dict(mock_settings).get(3), dict(mock_settings).get(4),
dict(mock_settings).get(5))
testUtility = Utilities()
testUtility.send_email(settings, dict(mock_settings).get(5), json_content)
self.assertTrue(mock_utility.called)
print(json_content)
mock_settings.get_confidential_data.assert_called_once()
但是 mock_settings.get_confidential_data.assert_call_once() 以及
self.assertTrue(mock_utility.called) 给出错误。