如何理解来自python minimock的示例?
这行代码是什么意思呢?
>>> 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()