首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python中模拟电子邮件的机密信息

如何在python中模拟电子邮件的机密信息
EN

Stack Overflow用户
提问于 2020-07-16 01:37:36
回答 1查看 50关注 0票数 1

我有一个返回字典的方法,该字典包含电子邮件特定的机密信息,如地址、收件人、令牌等。

要发送电子邮件,我需要访问rest URL,并将数据与机密信息一起发送。

我需要模拟负责发送邮件的方法

代码语言:javascript
复制
  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

想知道如何才能为这个类编写一个mock

根据mattyx17解决方案,

我创造了这个,

代码语言:javascript
复制
   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_called_once()以及

self.assertTrue(mock_utility.called)出现错误。

EN

回答 1

Stack Overflow用户

发布于 2020-07-16 01:45:10

你可以只模拟你的设置对象和它对应的方法来返回你想要的任何东西。

代码语言:javascript
复制
from unittest.mock import MagicMock()    

mock_settings = MagicMock()
confidential_dict = {0: "confidential_details", 
                     1: "confidential_subject",
                     2: "confidential_name",
                     3: "confidential3",
                     4:  "confidential4"}
mock_settings.get_confidential_data = MagicMock(return_value=confidential_dict)

现在,当您将模拟设置作为参数提供给函数时,您可以检查是否调用了get_confidential_data方法(mock_settings.get_confidential_data.assert_called_once()),并检查是否使用来自confidential_dict的正确信息调用了其他方法/类

类似地,您可以模拟您的Utilities类:

代码语言:javascript
复制
from unittest.mock import patch

@patch("<path-to-class>.Utilities)
def my_test_class(mock_utilities):
   mock_object = MagicMock()
   mock_utilities.return_value = mock_object

现在,mock_objectUtilities类的模拟实例,您现在可以模拟发送电子邮件消息

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62920717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档