模仿python中的行为,只关心其中一个参数

2024-09-21 00:21:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用magic mock进行一些python测试。有一个函数

sendmail()

从源代码来看,定义如下

def sendmail(sender, 
         addrs, 
         subject, 
         body, 
         format               = 'plain', 
         cc                   = [], 
         bcc                  = [], 
         replyTo              = [],
         attach               = [], 
         useOutlook           = False,
         force                = False,  ## UNUSED!
         priority             = None,
         addStandardBobFooter = True
         ):

那么多其实并不重要。我想让我的测试做的是确认这是发送一封主题正确的电子邮件。所以到目前为止我所做的是。。。你知道吗

sendmail = MagicMock()
self._fundingRollsPublisher.publish()  #this function contains a call to sendmail()

在发布代码中,我们有

def publish(): 

#much more code
sendmail(mail_from, mail_to, subject, body, format = 'html')

抱歉,到目前为止解释得太冗长了,但这只是所有的背景知识。如何确认使用给定主题调用send mail函数。。。比如说,如果我想主题是“紧急”,那么我想做一些事情的效果

sendmail.assert_called_with(subject= "URGENT")

当我尝试这个的时候,它似乎不起作用。有没有人知道一种只关心其中一个变量的方法?你知道吗


Tags: to函数falseformat主题定义源代码def
1条回答
网友
1楼 · 发布于 2024-09-21 00:21:29

你可以这样做

class MagicMock:
    def __init__(self, *args, **kwargs):
        self.args = args
        self.kwargs = kwargs

    def assert_subject(self, subject):
        assert len(self.args) > 2 and self.args[2] == subject) or self.kwargs.get('subject', None) == subject, "Unexpected subject"

相关问题 更多 >

    热门问题