如何理解来自python minimock的示例?

2 投票
1 回答
1182 浏览
提问于 2025-04-16 02:18

这行代码是什么意思呢?

>>> smtplib.SMTP.mock_returns =  Mock('smtp_connection')? 

什么是smtp_connection?看起来我可以把它改成任何名字。

下面的内容来自minimock

Here's an example of something we might test, a simple email sender::                                                        

>>> import smtplib                                                                                                       
>>> def send_email(from_addr, to_addr, subject, body):                                                                   
...     conn = smtplib.SMTP('localhost')                                                                                 
...     msg = 'To: %s\nFrom: %s\nSubject: %s\n\n%s' % (                                                                  
...         to_addr, from_addr, subject, body)                                                                           
...     conn.sendmail(from_addr, [to_addr], msg)                                                                         
...     conn.quit()                                                                                                      

现在我们想要创建一个模拟的 smtplib.SMTP 对象。我们需要把这个模拟对象
注入到 smtplib 模块中:

>>> smtplib.SMTP = Mock('smtplib.SMTP')                                                                                  
>>> smtplib.SMTP.mock_returns = Mock('smtp_connection')                                                                  

现在我们来进行测试:

>>> send_email('ianb@colorstudy.com', 'joe@example.com',                                                                 
...            'Hi there!', 'How is it going?')                                                                          
Called smtplib.SMTP('localhost')                                                                                         
Called smtp_connection.sendmail(                                                                                         
    'ianb@colorstudy.com',                                                                                               
    ['joe@example.com'],                                                                                                 
    'To: joe@example.com\nFrom: ianb@colorstudy.com\nSubject: Hi there!\n\nHow is it going?')                            
Called smtp_connection.quit()

1 个回答

2

如果你去看看其他文档,你会发现以下内容:

模拟对象有几个属性,创建对象时你可以设置这些属性。为了避免名字冲突,所有属性的名字都以mock_开头,而构造函数的参数则没有这个前缀。

name:这个属性是对象的名字,用于打印消息时显示。在之前的例子中,它的名字是'smtplib.SMTP'。

这个名字代表连接的名称,比如在以下代码中使用:

Called smtp_connection.sendmail(                                                                                         
    'ianb@colorstudy.com',                                                                                               
    ['joe@example.com'],                                                                                                 
    'To: joe@example.com\nFrom: ianb@colorstudy.com\nSubject: Hi there!\n\nHow is it going?')                            
Called smtp_connection.quit()

撰写回答